In deze zelfstudie leert u hoe u duplicaten uit een array in VBA kunt verwijderen.
Duplicaten verwijderen
De eenvoudigste manier om duplicaten uit een VBA-array te verwijderen, is door de arraywaarden toe te wijzen aan een VBA-verzameling en de waarden vervolgens door te geven aan een array. Collecties staan geen dubbele waarden toe en dus met behulp van een collectie kunnen we duplicaten uit een array verwijderen. We hebben een functie gemaakt om deze taak uit te voeren:
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061 | Functie ArrayRemoveDups(MyArray As Variant) As VariantDim nEerste zo lang, nLaatste zo lang, ik zo langDim item als stringDim arrTemp() As StringDim Coll als nieuwe collectie'Verkrijg eerste en laatste array-posities'nEerste = LBound(MyArray)nLaatste = UBound(MijnArray)ReDim arrTemp (nEerste Naar nLaatste)'Array converteren naar string'Voor i = nEerste Tot nLaatstearrTemp(i) = CStr(MijnArray(i))volgende i'Tijdelijke collectie bevolken'Bij fout Hervatten volgendeVoor i = nEerste Tot nLaatsteColl.ArrTemp(i), arrTemp(i) toevoegenvolgende iErr.ClearBij fout Ga naar 0'Formaat van array wijzigen'nLaatste = Verzameltelling + nEerste - 1ReDim arrTemp (nEerste Naar nLaatste)'Array bevolken'Voor i = nEerste Tot nLaatstearrTemp(i) = Coll(i - nEerste + 1)volgende i'Uitvoerarray'ArrayRemoveDups = arrTempFunctie beëindigenSub ArrTest()Dim strNames (1 tot 4) als stringDim outputArray() As StringDim ik zo langDim item als variant'Initiële arraywaarden instellen'strNames(1) = "Shelly"strNames(2) = "Steve"strNames(3) = "Neema"strNames(4) = "Steve"'Call Dup-functie'outputArray = ArrayRemoveDups(strNames)'Uitvoerwaarden naar direct venster (CTRL + G)Voor elk item In outputArrayDebug.Print itemVolgende itemEinde sub |
Opmerking: in het voorbeeld hebben we onze array gedwongen om bij 1 te beginnen (niet bij 0). Als uw array begint bij 0, moet u de code enigszins wijzigen.
Merk op dat we de array-inhoud naar een string converteren. Indien nodig kunt u de tekenreeksen terug converteren naar gehele getallen nadat het proces is voltooid.