HERBERS Excel-Forum - das Archiv

Thema: Duplikate entfernen

Duplikate entfernen
Helene
Schönen Abend,
mit der folgenden Code-Zeile werden Duplikate entfernt:
wks.Range("$A$1:$E$6").RemoveDuplicates Columns:=Array(1, 2, 3, 4, 5), Header:=xlNo

Das Array bei Columns wurde mittels Makrorekorder angeführt.

Wie kann ich das Array flexibel einsetzen, so das beim nächsten Mal, wenn der Bereich z.B. von A:K geht die Array-Angabe automatisch auf die Spalten von A:K Bezug nimmt.

MfG Helene
AW: Duplikate entfernen
schauan
Hallöchen,

da Du nicht schreibst, wie Du zu Spalte K kommst, hier mal eine Variante, wo Du die Endspalte als Zahl einträgst:

Dim arrFolge, iCnt%, iCol%

iCol = 5 'Spalte E
ReDim arrFolge(1 To iCol)
For iCnt = 1 To iCol
arrFolge(iCnt) = iCnt
Next
wks.Range(Cells(1, 1), Cells(6, iCol)).RemoveDuplicates Columns:=arrFolge, Header:=xlNo
AW: Duplikate entfernen
Helene
Hallo,
also etwas übersehe ich oder mache es falsch.

Ich habe mal die Datei angehängt.
https://www.herber.de/bbs/user/169041.xlsm

Die Zeile bei "RemoveDuplicates" wird gelb angezeigt und erscheint die Meldung:
Laufzeitfehler 5: Ungültiger Prozeduraufruf oder ungültiges Argument

MfG Helene
AW: Duplikate entfernen
schauan
Hallöchen,

das ist aber schemain von Excel. :-( dass da unmittelbar kein variables Array geht. Anscheinend will die Funktion an der Stelle wirklich selber ein Array bilden ....
So sollte es klappen:
wks.Range(wks.Cells(1, 1), wks.Cells(8, iCol)).RemoveDuplicates Columns:=Evaluate(arrFolge), Header:=xlNo

Vielen Dank, Tiptop. Einen schönen Tag, MfG Helene
Helene
Tja, habe mich leider zu früh gefreut.....
Helene
Hallo,
scheinbar prüft "Evaluate(arrFolge)" bei RemoveDuplicates nur auf die erste Spalte.

Das habe ich aber erst nach einigen Tests gemerkt.

Hier nochmals der bisherige Code:
Sub DuplEntf()

Dim wks As Worksheet
Dim arrFolge, iCnt%, iCol%

Set wks = Tabelle4

iCol = 7 'die letzte Spalte muss ich noch ermitteln, im Beispiel ist es Spalte G, also 7
ReDim arrFolge(1 To iCol)

For iCnt = 1 To iCol
arrFolge(iCnt) = iCnt
Next

wks.Range(wks.Cells(1, 1), wks.Cells(8, iCol)).RemoveDuplicates Columns:=Evaluate(arrFolge), Header:=xlNo

Set wks = Nothing
End Sub


Hoffe dennoch auf eine Lösung,
MfG Helene
Hier nochmals die Tabelle:
https://www.herber.de/bbs/user/169098.xlsm

Jetzt habe ich die Lösung....
Helene
gefunden.

Falls es interessiert, damit geht es mit meinem Beispiel:
Sub DuplEntf()

Dim wks As Worksheet
Dim lastcolumn As Long
Dim LastRow As Long
Dim i As Long

Set wks = Tabelle4
lastcolumn = 7
LastRow = 6

ReDim MyArray(lastcolumn - 1)

For i = 1 To lastcolumn
MyArray(i - 1) = i
Next i

wks.Range(wks.Cells(1, 1), wks.Cells(LastRow, lastcolumn)).RemoveDuplicates (MyArray), xlNo

End Sub