Форум программистов и сисадминов CyberForum.ru
Вернуться   Форум программистов и сисадминов CyberForum.ru > Форум Форум программистов > Форум Basic > Форум VBA
Восстановить пароль Регистрация

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

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

При работе в Excel при установке автофильтра, Excel моментом заполняет ListBox уникальными значениями, даже при большом заполнении таблицы.
Старый 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. Программирование на Visual Basic for Applications. Помощь в решении задач.
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
Google
Объявления
Старый 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
Объявления
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать новую тему

Похожие темы
Тема Автор
VBA VBA Excel Номер ваделенной колонки, получение номера выделенной колонки
Как получить номер выделенной колонки, т.е. выделил колону 'С', а он мне выдал, колонка '3', а не 'C:C' Заранее спасибо
gas1979
Visual Basic .NET Как получить уникальные значения оборудования компьютера
Что в железе компьютера есть уникальное (серийный номер) и как это програмно получить? Пробовал с MAC-ом модема, но не на всех модемах можно получить его, странно почему то
Micro
Visual Basic Получить все уникальные значения массива
Есть таблица 4х4, в ней 16 значений, из них от 2 до 8 уникальны, а остальные дублируют эти значения. Я пытаюсь вывести эти уникальные значения в текстовое поле, но что-то у меня не получается т.к. я проболел тему массивов :) Посмотрите, пожалуйста, и скажите, что я делаю не так. Dim a1...a16 as...
hukkfynn
VBA VBA Excel listbox уникальные значения
Допустим у меня есть listbox1 12 32 32 12 12 4 6
[JB]
PHP для начинающих Нужно получить все уникальные значения из поля MySQL.
День добрый! Народ, подскажите, сложилась такая задача: нужно получить все уникальные значения из поля мускл? В пхп есть функция, которая это делает с массивами array_count_values(). Можно конечно и с её помощью решить мою задачу, но решил посоветоваться, может быть это можно как-то проще...
sl_play
Опции темы

Текущее время: 18:43. Часовой пояс GMT +4.

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.7 PL3
Copyright ©2000 - 2014, vBulletin Solutions, Inc.