VBA - Populați matrice cu valori unice din coloană

Acest tutorial vă va învăța cum să completați o matrice cu valori unice dintr-o coloană din VBA.

Populați matrice cu valori unice din coloană

Luarea unei liste de valori dintr-o foaie Excel într-o matrice este o chestiune de a parcurge rândurile din Excel și de a completa matricea.

Luați în considerare următoarea listă de clienți dintr-o foaie Excel.

Folosind o buclă, am putea popula o matrice în VBA. Cu toate acestea, o buclă standard va parcurge fiecare rând, inclusiv rânduri duplicate și veți ajunge cu valori duplicate în matrice.

Soluția de a parcurge celulele și de a completa un obiect Colecție cu valorile ca obiect de colecție nu va permite duplicate. Puteți utiliza apoi acel obiect de colecție pentru a vă completa matricea.

1234567891011121314151617181920212223242526 Sub PopulateUniqueArray ()Dim StrCustomers () Ca șirDim Col Ca colecție nouăDim valCell As StringDim i IntegerDim n Ca întreg'numărați rândurile din intervaln = Range ("A1", Range ("A1"). End (xlDown)). Rows.Count„Populați colecția temporarăLa eroare Reluați în continuarePentru i = 0 la nvalCell = Range ("A1"). Offset (i, 0). ValoareCol.Add valCell, valCellApoi euEroare. ȘtergețiLa eroare GoTo 0'Redimensionează nn = Col.Count'Redeclarare matriceReDim StrCustomers (1 la n)„Populați matricea prin parcurgerea colecțieiPentru i = 1 la Col.CountStrCustomers (i) = Col (i)Apoi euDebug.Print Join (StrCustomers (), vbCrLf)Sfârșitul Sub

Populați matrice cu valori unice - Funcție

Exemplul de mai sus a arătat o procedură care ar efectua acțiunile dorite. Dar, în schimb, ați putea prefera o funcție portabilă pentru a efectua sarcina:

123456789101112131415161718192021222324 Funcția CreateUniqueList (nStart as Long, nEnd as long) ca VariantDim Col Ca colecție nouăDim arrTemp() La fel de ŞirDim valCell As StringDim i Integer„Populați colecția temporarăLa eroare Reluați în continuarePentru i = 0 Până la sfârșitvalCell = Range ("A" & nStart). Offset (i, 0). ValoareCol.Add valCell, valCellApoi euErr.ClarLa eroare GoTo 0'Redimensionează nnEnd = Col.Count'Redeclarare matriceReDim arrTemp(1 până la sfârșit)'Populați matricea temporară parcurgând colecțiaPentru i = 1 la Col.CountarrTemp(i) = Col (i)Apoi eu'returnează matricea temporară la rezultatul funcțieiCreateUniqueList = arrTemp()Funcția de sfârșit

Pentru a utiliza funcția, va trebui să o apelați dintr-o procedură secundară:

123456789 Sub PopulateArray ()Dim StrCustomers () Ca șirDim strCol ca ColecțieDim n As Long'numărați rândurile din intervaln = Range ("A1", Range ("A1"). End (xlDown)). Rows.Count'rulați funcția pentru a crea o serie de valori unicestrCustomers () = CreateUniqueList (1, n)Sfârșitul Sub
wave wave wave wave wave