• Privacywetgeving
    Het is bij Helpmij.nl niet toegestaan om persoonsgegevens in een voorbeeld te plaatsen. Alle voorbeelden die persoonsgegevens bevatten zullen zonder opgaaf van reden verwijderd worden. In de vraag zal specifiek vermeld moeten worden dat het om fictieve namen gaat.

Methode RemoveDuplicates toepassen op een Array [VBA toepassing]

Status
Niet open voor verdere reacties.

Ginger

Terugkerende gebruiker
Lid geworden
29 dec 2006
Berichten
2.972
Allen, ik vroeg me af of je de methode RemoveDuplicates van het Range-object ook kan toepassen op een array in een VBA procedure? Een beetje hetzelfde als dat je de methode Filter kan toepassen in een VBA code. Overigens snap ik dat je een kolom ff kan wegschrijven naar een lege kolom en daar die methode op loslaten en zo binnenhalen in je array, maar ik had dus voor ogen om die lees- en schrijfstap over te slaan.
Nu doorloop ik een array in een lus in de code en pak de unieke gegevens op. Dát werkt ook. ;)
Maar je moet proberen om jezelf te verbeteren nietwaar? :d
 
Laatst bewerkt:
Je kan het toch zo doen:

Code:
Dim dic As Object
 Set dic = CreateObject("Scripting.Dictionary")
  Application.ScreenUpdating = False
    For Each cl In Sheets(1).Range("A4:A" & Range("A" & Rows.Count).End(xlUp).Row).SpecialCells(2)
        If Not dic.exists(cl.Value) Then dic.Add cl.Value, Nothing
    Next cl
 
Cobbe, Dank voor je reactie en geboden oplossing. Dat is zéker óók een perfecte methode. Slim om de dict er op toe te passen.
Maar toch... Toch blijft voor mij de vraag openstaan of het kan met die RemoveDuplicates methode. ;)
 
Die dictionary aanpak kan ook zo:

Code:
  with  CreateObject("Scripting.Dictionary")
    For Each cl In Sheets(1).columns(1).SpecialCells(2)
        x0= .item(cl.value)
    Next cl
  end with

De removeduplicates methode vereist een Range als 'expression'.
Een Array is per definitie geen Range.
Ook al zou je een range aan een variable toewijzen en daarop de methode removeduplicates lolaten, dan nog verschilt die aanpak niet van het directe gebruik van de methode op een gebied (range) in een werkblad.
 
@snb, Dank voor je reactie en dank voor een tweede methode voor ontdubbelen! En helder. In het licht van jouw opmerking dacht ik de variabele in te zetten als Range-object. Helaas werkt dit dus ook niet.
Code:
Sub Testen()
Dim Gebied As Range

    Set Gebied = Cells(1).CurrentRegion
    
    x = Gebied.RemoveDuplicates(Columns:=Array(1))

End Sub
Ik hou het hierbij dus maar voor gezien.
 
Het kan zo:

Code:
Sub M_snb()
   Set gebied = Range("A1:A15")
   gebied = gebied.RemoveDuplicates(1)
End Sub

Maar dat is qua resultaat identiek aan:
Code:
Sub M_snb()
   Range("A1:A15").RemoveDuplicates(1)
   sn =range("A1:A15")
End Sub
 
snb, Yep. Maarrrrr.... Dan heb je tóch je brondata in de sheet verkloot. En dát wilde ik dus niet. ;)
Ik heb jou die methode ook wel 'ns zien gebruiken en dat je dan die brondata eerst ff ergens wegschreef, ontdubbelde, oppakte in de Array en weer verwijderde van die tijdelijk plek in de sheet.
Die stap wilde ik voorkomen, maar kan dus gewoon niet met RemoveDuplicates.
 
Du moment dat je een objectvariabele van de range maakt is iedere bewerking van de variabele tegelijkertijd een bewerking van de range. Dat schiet dus niet op.
Daarom is het gebruik van de variant en vervolgens de dictionary de aangewezen weg: de range blijft intact, omdat je met de variant alleen waarden 'kopieert':

Code:
with  CreateObject("Scripting.Dictionary")
    For Each cl In Sheets(1).Range"A1:A15").SpecialCells(2)
        x0= .item(cl.value)
    Next
    sn=.keys
end with
of

Code:
sn=range("A1:A15").specialcells(2)
 with  CreateObject("Scripting.Dictionary")
    For Each it in sn
        x0= .item(it.value)
    Next
    sn=.keys
  end with
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan