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