Denna handledning lär dig hur du fyller i en array med unika värden från en kolumn i VBA.
Befolkningsgrupp med unika värden från kolumn
Att ta en lista med värden från ett Excel -ark till en matris handlar om att gå igenom raderna i Excel och fylla i matrisen.
Tänk på följande kundlista i ett Excel -ark.
Med hjälp av en loop kan vi fylla i en Array i VBA. En standardslinga går dock igenom varje rad, inklusive dubblerade rader och du kommer att få dubblettvärden i din matris.
Lösningen att gå igenom cellerna och fylla i ett samlingsobjekt med värdena som ett samlingsobjekt tillåter inte dubbletter. Du kan sedan använda det samlingsobjektet för att fylla i din matris.
1234567891011121314151617181920212223242526 | Sub PopulateUniqueArray ()Dim StrCustomers () Som strängDim Col As New CollectionDim valCell som strängDim i As IntegerDim n Som heltal'räkna raderna i intervalletn = Range ("A1", Range ("A1"). End (xlDown)). Rows.Count'Befolkas tillfällig samlingVid fel Återuppta nästaFör i = 0 Till nvalCell = Range ("A1"). Offset (i, 0) .VärdeKol. Lägg till valCell, valCellNästa iErr.TydligVid fel GoTo 0'Ändra storlek nn = Kol.antal'Redeclare arrayReDim StrCustomers (1 till n)'Populate Array genom att bläddra igenom samlingenFör i = 1 Till kol.räkningStrCustomers (i) = Col (i)Nästa iDebug.Print Join (StrCustomers (), vbCrLf)Avsluta Sub |
Befolkningsgrupp med unika värden - funktion
Exemplet ovan visade ett förfarande som skulle utföra dina önskade åtgärder. Men istället kanske du föredrar en bärbar funktion för att utföra uppgiften:
123456789101112131415161718192021222324 | Funktion CreateUniqueList (nStart as Long, nEnd as long) som VariantDim Col As New CollectionDämpa arrTemp() Som SträngDim valCell som strängDim i As Integer'Befolkas tillfällig samlingVid fel Återuppta nästaFör i = 0 Till nEndvalCell = Range ("A" & nStart) .Offset (i, 0) .VärdeKol. Lägg till valCell, valCellNästa iErr.TydligVid fel GoTo 0'Ändra storlek nnEnd = Col.Count'Redeclare arrayReDim arrTemp(1 Till nEnd)'Befolkning av tillfällig matris genom att gå igenom samlingenFör i = 1 Till kol.räkningarrTemp(i) = kol (i)Nästa i'returnera den temporära matrisen till funktionsresultatetCreateUniqueList = arrTemp()Avsluta funktion |
För att använda funktionen måste du ringa den från ett delprocedur:
123456789 | Sub PopulateArray ()Dim StrCustomers () Som strängDim strCol som samlingDim n As Long'räkna raderna i intervalletn = Range ("A1", Range ("A1"). End (xlDown)). Rows.Count'kör funktionen för att skapa en rad unika värdenstrCustomers () = CreateUniqueList (1, n)Avsluta Sub |