VBA - Eliminați duplicatele din matrice

Acest tutorial vă va învăța cum să eliminați duplicatele dintr-o matrice în VBA.

Eliminați duplicatele

Cel mai simplu mod de a elimina duplicatele dintr-o matrice VBA este de a atribui valorile matricei unei colecții VBA și apoi de a transfera valorile înapoi către o matrice. Colecțiile nu permit valori duplicate și, prin urmare, folosind o colecție, putem elimina duplicatele dintr-o matrice. Am creat o funcție pentru a efectua această sarcină:

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061 Funcția ArrayRemoveDups (MyArray As Variant) Ca VariantDim nFirst As Long, nLast As Long, i As LongAtenuați elementul ca șirDim arrTemp () Ca șirDim Coll Ca colecție nouă„Obțineți prima și ultima poziție de matricenFirst = LBound (MyArray)nLast = UBound (MyArray)ReDim arrTemp (nFirst To nLast)„Convertiți matricea în șirPentru i = nFirst To nLastarrTemp (i) = CStr (MyArray (i))Apoi eu„Populați colecția temporarăLa eroare Reluați în continuarePentru i = nFirst To nLastColl.Add arrTemp (i), arrTemp (i)Apoi euErr.ClarLa eroare GoTo 0„Redimensionați matriceanLast = Coll.Count + nFirst - 1ReDim arrTemp (nFirst To nLast)„Populați matriceaPentru i = nFirst To nLastarrTemp (i) = Coll (i - nFirst + 1)Apoi eu„Matrice de ieșireArrayRemoveDups = arrTempFuncția de sfârșitSub ArrTest ()Dim strNames (1 până la 4) ca șirDim outputArray () Ca șirDim i As LongReduceți elementul ca variantă„Setați valorile matricei inițialestrNames (1) = "Shelly"strNames (2) = "Steve"strNames (3) = "Neema"strNames (4) = "Steve"„Apelează funcția DupoutputArray = ArrayRemoveDups (strNames)„Valorile de ieșire la fereastra imediată (CTRL + G)Pentru fiecare element din outputArrayDebug.Print elementUrmătorul elementSfârșitul Sub

Notă: în exemplu ne-am forțat matricea să înceapă de la 1 (nu 0). Dacă matricea dvs. începe de la 0, va trebui să modificați ușor codul.

Observați că convertim conținutul matricei într-un șir. Dacă este necesar, puteți converti șirurile înapoi la numere întregi după finalizarea procesului.

wave wave wave wave wave