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

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

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

При работе в Excel при установке автофильтра, Excel моментом заполняет ListBox уникальными значениями, даже при большом заполнении таблицы.
Другие темы раздела Форум программистов 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. Нужно правильно построить Nodes
VBA Можно ли с помощью формы в одной книге Excel вносить данные в ячейки двух книг?
Можно ли с помощью формы в одной книге Excel вносить данные в ячейки двух книг?. Можно ли с помощью формы в одной книге Excel вносить данные в ячейки двух книг?
Старый 11.09.2008, 22:07   #2
Korolana
Форумчанин
 
Регистрация: 27.08.2008
Сообщений: 147
Репутация: 0 (0)
По умолчанию RE: Как получить уникальные значения из колонки 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
Korolana вне форума
Старый 15.09.2008, 11:54   #3
Savelev
Гость
 
Сообщений: n/a
По умолчанию RE: Как получить уникальные значения из колонки VBA Excel

Спасибо за пример.
Старый 18.09.2008, 12:10   #4
yuniki
Форумчанин
 
Регистрация: 28.09.2007
Сообщений: 288
Репутация: 0 (0)
По умолчанию RE: Как получить уникальные значения из колонки 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 -->>
yuniki вне форума
Старый 18.09.2008, 21:28   #5
Korolana
Форумчанин
 
Регистрация: 27.08.2008
Сообщений: 147
Репутация: 0 (0)
По умолчанию RE: Как получить уникальные значения из колонки VBA Excel

This way is right too, but much slower. Try it.
Korolana вне форума
Старый 25.09.2008, 15:04   #6
maks_well
Новичок
 
Регистрация: 29.06.2008
Сообщений: 5
Репутация: 0 (0)
По умолчанию RE: Как получить уникальные значения из колонки 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
maks_well вне форума
Старый 25.09.2008, 17:02   #7
Serg_FSM
Новичок
 
Регистрация: 23.07.2008
Сообщений: 47
Репутация: 0 (0)
По умолчанию RE: Как получить уникальные значения из колонки 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, то может получиться)
Serg_FSM вне форума
Старый 17.06.2009, 16:06
Yandex
Объявления
Старый 17.06.2009, 16:06   #8
wanton2
Новичок
 
Регистрация: 25.01.2009
Сообщений: 14
Репутация: 0 (0)
По умолчанию RE: Как получить уникальные значения из колонки VBA Excel

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

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

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

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

Похожие темы
Тема Автор
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
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

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

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