Форум программистов, компьютерный форум CyberForum.ru Форум программистов | Компьютерный форум | Форум web-программистов | Форум по электронике и бытовой технике | Форум о софте | Научный форум | Карьера и бизнес
CyberForum.ru - форум программистов и сисадминов > > >
Восстановить пароль Регистрация

Ответ Создать новую тему
 
10.09.2008, 15:54   #1
Savelev
Гость
Сообщений: n/a
Как получить уникальные значения из колонки VBA Excel? / VBA

Как получить уникальные значения из колонки таблицы в VBA Excel например в массив?

При работе в Excel при установке автофильтра, Excel моментом заполняет ListBox уникальными значениями, даже при большом заполнении таблицы.
10.09.2008, 15:54
AdAgent
Объявления
11.09.2008, 22:07   #2
Korolana
Форумчанин
Регистрация: 27.08.2008
Сообщений: 154
Репутация: 0 (0)
Как получить уникальные значения из колонки VBA Excel?

Sub FillArrayWithUniqueValue()
Dim MyArray() As Variant

Columns('A:A').Select ' select your column
Range('A1:A14').AdvancedFilter Action:=xlFilterInPlace, Unique:=True ' filter on this column to receive unique values
' part of rows will be hidden and I need not include them into my next selection

ActiveCell.CurrentRegion.Select ' copy unique values from this column to some free temporary place and select this region
nRow = Selection.Rows.Count
Selection.Copy
ActiveSheet.Paste Destination:=Cells(nRow + 2, 2)
Cells(nRow + 2, 2).Select
ActiveCell.CurrentRegion.Select


MyArray = Selection 'fill my array with our unique values from Excel
ActiveCell.CurrentRegion.Clear ' clear our temporary region
ActiveSheet.ShowAllData ' clear our filter


End Sub

Now, all your data in two-dimensial array.
In this case, you can see your data it in Myarray(1,1), MyArray(2,1)...and so on
Другие темы раздела
VBA Нужно правильно построить Nodes
Ludi pomogite! U mena est Tabliza w kototoi 2 Kolomki: OE_ID OE_OE 7 7 9 7 11 9 1 11 2 11
VBA Можно ли с помощью формы в одной книге Excel вносить данные в ячейки двух книг?
Можно ли с помощью формы в одной книге Excel вносить данные в ячейки двух книг?
15.09.2008, 11:54   #3
Savelev
Гость
Сообщений: n/a
Как получить уникальные значения из колонки VBA Excel?

Спасибо за пример.
18.09.2008, 12:10   #4
yuniki
Форумчанин
Регистрация: 28.09.2007
Сообщений: 288
Репутация: 0 (0)
Как получить уникальные значения из колонки VBA Excel?

Я это делаю по другому (нужно для заполнения списков в контролах):

' Выбирает из заданого именованного диапазона с заголовком RngName
' столбик fldName и отбирает только уникальные его значения
' в массиве aSel (<размер массива>,<Значение1>,...)
' Структура именованного диапазона :
' <ИмяСтолбца1 ><ИмяСтолбца2>...
' <ЗначСтолбца1><ЗначCтолбца2>...

Public Function UnicSelect(ByRef rngName As String, ByRef fldName As String, _
ByRef aSel() As Variant, _
Optional ByRef strSQL As String = '')
Dim cnn As ADODB.Connection, Rs As ADODB.Recordset, i As Long
Set cnn = New ADODB.Connection
cnn.Open 'Provider=Microsoft.Jet.OLEDB.4.0;' & _
'Data Source=' & _
ActiveWorkbook.Path + ' ' + ActiveWorkbook.Name & ';' & _
'Extended Properties=Excel 8.0' 'HDR=Yes;'
Set Rs = New ADODB.Recordset
Rs.Open Source:='SELECT distinct ' & fldName & ' from ' & rngName, _
ActiveConnection:=cnn, _
CursorType:=adOpenDynamic, _
LockType:=adLockReadOnly, _
Options:=adCmdText
ReDim Preserve aSel(0) ' инициализация массива
aSel(0) = 0 ' 0-й элемент хранит размер массива
i = 0
Rs.MoveFirst
Do While Not Rs.EOF
ReDim Preserve aSel(i + 1)
aSel(UBound(aSel)) = Rs.Fields(fldName)
Rs.MoveNext: i = i + 1
Loop
aSel(0) = UBound(aSel) '
Rs.Close: cnn.Close: Set Rs = Nothing: Set cnn = Nothing
End Function ' UnicSelect -->>
18.09.2008, 12:10
AdAgent
Объявления
18.09.2008, 21:28   #5
Korolana
Форумчанин
Регистрация: 27.08.2008
Сообщений: 154
Репутация: 0 (0)
Как получить уникальные значения из колонки VBA Excel?

This way is right too, but much slower. Try it.
25.09.2008, 15:04   #6
maks_well
Новичок
Регистрация: 29.06.2008
Сообщений: 5
Репутация: 0 (0)
Как получить уникальные значения из колонки VBA Excel?

Попробуй на скорость это
По-моему алгоритм уже был когда-то на этом форуме

Sub FormSpisok(ListName, FirstRow, NumColumn, Spisok)

'Формирует (в массив Spisok) список строк неповторяющихся значений из листа ListName в столбце NumColumn, начиная с ряда FirstRow
'Ограничение на листе-первое пустое значение
'Первое значение массива Spisok(0)-кол-во значений

Dim numb As Integer
Dim stroka As String
Dim DataValues As New Collection

ReDim Spisok(1)
Spisok(0) = 0

stroka = Trim(Sheets(ListName).Cells(FirstRow, NumColumn))
On Error Resume Next
Do While stroka <> ''
DataValues.Add stroka, stroka
FirstRow = FirstRow + 1
stroka = Trim(Sheets(ListName).Cells(FirstRow, NumColumn))
Loop
On Error GoTo 0

numb = 1
For Each DataValue In DataValues
ReDim Preserve Spisok(numb + 1)
Spisok(numb) = DataValue
numb = numb + 1
Next
Spisok(0) = numb - 1
End Sub
25.09.2008, 17:02   #7
Serg_FSM
Новичок
Регистрация: 23.07.2008
Сообщений: 47
Репутация: 0 (0)
Как получить уникальные значения из колонки VBA Excel?

Приветствую.
Несколько измененый вариант, предложенный Короланой, извлекает уникальные значения из столбца с активной ячейкой:
Код Code
1
2
3
4
5
Public Sub FillArrayWithUniqueValue()
Dim MyArray() As Variant
ActiveCell.EntireColumn.AdvancedFilter Action:=xlFilterCopy, copytorange:=Cells(2, 4), unique:=True 'filter for current column
MyArray = Cells(2, 4).CurrentRegion.Value
Cells(2, 4).CurrentRegion.Clear ' clear our temporary region
правда не работает если первая ячейка пустая и еще можно потерять часть значений (из-за использования CurrentRegion) если среди уникальных есть пустая ячейка (хотя если перед заполнением массива отсортировать temporary region, то может получиться)
17.06.2009, 16:06   #8
wanton2
Новичок
Регистрация: 25.01.2009
Сообщений: 14
Репутация: 0 (0)
Как получить уникальные значения из колонки VBA Excel? / VBA

как уникальные найти я понял...
а как отметить строки *дубликатов* каким - ниб. цветом???
можно найти unique-> Selection.покрасить-> ShowAllData-> если не закрашено, то закрасить своим цветом....
но если 4 дубликата, то незакр. будет 3!!!
как сделать 'красиво'?

что то я туплю мало-мало... ;-/

гуру, подскажите, плз!

заранее, 10х!
17.06.2009, 16:06
Yandex
Объявления
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать новую тему

Похожие темы
Тема Раздел Автор Дата
C# WinForms .NET 4.x Получить уникальные значения из столбца
Доброй ночи всем. Вот в чем вопрос… есть dataGridView и динамически я создаю label. Подскажите пожалуйста как в label получить уникальные значения из столбца(наподобие AutoCompleteCustomSource). Если брать из рис то должно получиться как то так: label.Text = “АА”; label.Text = “ББ”; label.Text =...
C# Windows Forms malta87 23.03.2014 20:03
VBA VBA Excel Номер ваделенной колонки, получение номера выделенной колонки
Как получить номер выделенной колонки, т.е. выделил колону 'С', а он мне выдал, колонка '3', а не 'C:C' Заранее спасибо
VBA gas1979 22.01.2014 13:41
Visual Basic .NET Как получить уникальные значения оборудования компьютера
Что в железе компьютера есть уникальное (серийный номер) и как это програмно получить? Пробовал с MAC-ом модема, но не на всех модемах можно получить его, странно почему то
Visual Basic .NET Micro 10.01.2012 20:03
Visual Basic Получить все уникальные значения массива
Есть таблица 4х4, в ней 16 значений, из них от 2 до 8 уникальны, а остальные дублируют эти значения. Я пытаюсь вывести эти уникальные значения в текстовое поле, но что-то у меня не получается т.к. я проболел тему массивов :) Посмотрите, пожалуйста, и скажите, что я делаю не так. Dim a1...a16 as...
Visual Basic hukkfynn 04.12.2011 23:57
VBA VBA Excel listbox уникальные значения
Допустим у меня есть listbox1 12 32 32 12 12 4 6
VBA [JB] 06.12.2010 21:09
Опции темы


Текущее время: 02:29. Часовой пояс GMT +4.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.7 PL3
Copyright ©2000 - 2014, vBulletin Solutions, Inc.