VBA - Populate Array med unike verdier fra kolonne

Denne opplæringen lærer deg hvordan du fyller ut en matrise med unike verdier fra en kolonne i VBA.

Fyll ut matrise med unike verdier fra kolonne

Å ta en liste med verdier fra et Excel -ark til en matrise er et spørsmål om å gå gjennom radene i Excel og fylle ut matrisen.

Tenk på følgende liste over kunder i et Excel -ark.

Ved å bruke en sløyfe kan vi fylle ut en matrise i VBA. Imidlertid vil en standard loop gå gjennom hver rad, inkludert dupliserte rader, og du vil ende opp med dupliserte verdier i Array.

Løsningen for å gå gjennom cellene og fylle et samlingsobjekt med verdiene som et samlingsobjekt, tillater ikke duplikater. Du kan deretter bruke det samlingsobjektet til å fylle ut matrisen.

1234567891011121314151617181920212223242526 Sub PopulateUniqueArray ()Dim StrCustomers () As StringDim Col As New CollectionDim valCell som strengDim i As IntegerDim n Som heltall'teller radene i områdetn = Range ("A1", Range ("A1"). End (xlDown)). Rows.Count'Befolkning midlertidig samlingVed feil Fortsett nesteFor i = 0 Til nvalCell = Range ("A1"). Offset (i, 0) .VærdiCol.Add valCell, valCellNeste jegErr.KlarVed feil GoTo 0'Endre størrelse nn = Kolonnenummer'Redeclare matriseReDim StrCustomers (1 til n)'Populate Array ved å gå gjennom samlingenFor i = 1 Til kol.tallStrCustomers (i) = Col (i)Neste jegDebug.Print Join (StrCustomers (), vbCrLf)Slutt Sub

Fyll ut matrise med unike verdier - funksjon

Eksemplet ovenfor viste en prosedyre som utførte de ønskede handlingene. Men i stedet foretrekker du kanskje en bærbar funksjon for å utføre oppgaven:

123456789101112131415161718192021222324 Funksjon CreateUniqueList (nStart som Long, nEnd as long) som VariantDim Col As New CollectionDim arrTemp() Som StringDim valCell som strengDim i As Integer'Befolk midlertidig samlingVed feil Fortsett nesteFor i = 0 Til nEndvalCell = Range ("A" & nStart) .Offset (i, 0) .ValueCol.Add valCell, valCellNeste jegErr.KlarVed feil GoTo 0'Endre størrelse nnEnd = Kol.Antall'Redeclare matriseReDim arrTemp(1 Til slutt)'Befolk midlertidig matrise ved å gå gjennom samlingenFor i = 1 Til kol.tallarrTemp(i) = Kol (i)Neste jeg'returner den midlertidige matrisen til funksjonsresultatetCreateUniqueList = arrTemp()Sluttfunksjon

For å bruke funksjonen må du kalle den fra en delprosedyre:

123456789 Sub PopulateArray ()Dim StrCustomers () As StringDim strCol som samlingDim n As Long'teller radene i områdetn = Range ("A1", Range ("A1"). End (xlDown)). Rows.Count'kjør funksjonen for å lage en rekke unike verdierstrCustomers () = CreateUniqueList (1, n)Slutt Sub
wave wave wave wave wave