В этом руководстве вы узнаете, как заполнить массив уникальными значениями из столбца в VBA.
Заполнить массив уникальными значениями из столбца
Взятие списка значений из листа Excel в массив - это процесс перебора строк в Excel и заполнения массива.
Рассмотрим следующий список клиентов в таблице Excel.
Используя цикл, мы можем заполнить массив в VBA. Однако стандартный цикл будет проходить через каждую строку, включая повторяющиеся строки, и вы получите повторяющиеся значения в вашем массиве.
Решение для перебора ячеек и заполнения объекта Collection значениями в качестве объекта коллекции не допускает дублирования. Затем вы можете использовать этот объект коллекции для заполнения вашего массива.
1234567891011121314151617181920212223242526 | Sub PopulateUniqueArray ()Dim StrCustomers () как строкаDim Col как новая коллекцияDim valCell как строкаDim i как целое числоDim n как целое число'подсчитываем строки в диапазонеn = Диапазон ("A1", Диапазон ("A1"). Конец (xlDown)). Rows.Count'Заполнить временную коллекциюПри ошибке Возобновить ДалееДля i = 0 К nvalCell = Range ("A1"). Offset (i, 0) .ValueCol.Add valCell, valCellДалее яErr.ClearПри ошибке GoTo 0'Изменить размер nn = Col.Count'Переобъявить массивReDim StrКлиенты (от 1 до n)'Заполнить массив, перебирая коллекциюДля i = 1 To Col.CountStrCustomers (i) = Col (i)Далее яDebug.Print Join (StrCustomers (), vbCrLf)Конец подписки |
Заполнить массив с уникальными значениями - функция
В приведенном выше примере показана процедура, которая выполнит желаемые вами действия. Но вместо этого вы можете предпочесть переносимую функцию для выполнения задачи:
123456789101112131415161718192021222324 | Функция CreateUniqueList (nStart as Long, nEnd as long) как вариантDim Col как новая коллекцияТусклый arrTemp() В качестве НитьDim valCell как строкаDim i как целое число'Заполнить временную коллекциюПри ошибке Возобновить ДалееДля i = 0 до nEndvalCell = Range ("A" & nStart) .Offset (i, 0) .ValueCol.Add valCell, valCellДалее яErr.ClearПри ошибке GoTo 0'Изменить размер nnEnd = Col.Count'Переобъявить массивReDim arrTemp(От 1 до конца)'Заполнить временный массив, перебирая коллекциюДля i = 1 To Col.CountarrTemp(i) = Col (i)Далее я'возвращаем временный массив в результат функцииCreateUniqueList = arrTemp()Конечная функция |
Чтобы использовать функцию, вам нужно вызвать ее из подпроцедуры:
123456789 | Sub PopulateArray ()Dim StrCustomers () как строкаDim strCol как КоллекцияDim n As Long'подсчитываем строки в диапазонеn = Диапазон ("A1", Диапазон ("A1"). Конец (xlDown)). Rows.Count'запускаем функцию, чтобы создать массив уникальных значенийstrCustomers () = CreateUniqueList (1, n)Конец подписки |