Ich sehe 3 Möglichkeiten:
Variante 1:
Der pragmatische Ansatz wäre die Funktion "Duplikate Entfernen". Mit VBA kannst du das mit Hilfe von:
ActiveSheet.Range("$A$2:$A$11").RemoveDuplicates Columns:=1, Header:=xlNo
machen. Dabei ist ein wichtiger Punkt die Frage, was mit den übrigen Zeilen passieren soll. Liegt ein Wert in Spalte A doppelt vor, sind die anderen Zellen dann identisch, oder können Spalten B bis ... unterschiedlich sein, du nimmst aber immer nur die erste gefundene? Es gibt verschiedene Optionen, dass du ganze Zeilen entfernen kannst, auch wenn diese "nicht identisch sind". Wenn also Spalte A doppelte Zeilen enthält, diese Zeilen in Spalte B, C, .. aber unterschiedlich sind, kann die Funktion dennoch diese als Dupplikate komplett entfernen.
Auf deine Frage wäre also der einfache Weg: Alles kopieren, nach Spalte A sortieren und dann duplikate entfernen.
Variante 2:
Kannst du dir nicht eine zusätzliche Spalte erzeugen (z.B. A, welche dann die "darüberliegenden" Werte auf vorkommen des Wertes aus der Zeile überprüft
=IFERROR(MATCH(B2;$B$1:B1;0);"-1") //englische Version
Das Ergebnis ist eine Zahl >0, wenn der Wert bereits einmal in einer Zeile darüber vorgekommen ist. Die Zahl ist die Reihe des Bereichs. Wurde kein Wert gefunden, gibt die Formel einen Fehler aus und der Fehler wird mit "-1" ersetzt. Dann musst du im VBA nun also nur noch die Spalte A auf vorkommen von -1 prüfen um Zeilen mit Werten zu finden, die bisher nicht vorkamen.
Variante 3:
Willst du alles in VBA machen, kommst du um die bereits angesprochenen doppelten Schleife nicht herum. Ich würde dabei jedoch vorschlagen, dass du dir ein "lookup"-Array anlegst, und den Wert immer mit den Werten im Array überprüfst.
Pseudocode:
lookupArray = {}
targetRow = 1;
For row x = 1 to n
value = cell (A,X);
found = false;
for lookupIndex = 1 to lookupIndex.last
if (lookupArray[lookupIndex] = value) then
found = true;
end if;
next lookupIndex;
if found = false then
copyRow x to targetRow;
targetRow = targetRow+1;
add value to lookupArray;
end if;
Für eine vollständig korrekte Lösung in VBA habe ich mir die Zeit gespart, du musst also selber noch die korrekten Befehle zusammenfügen.
Warum dieser Vorschlag?
Wenn VBA auf Zellen im Arbeitsblatt zugreifen muss, ist der Code ziemlich langsam. Wenn du dir das duplikate-Array also im Speicher von VBA selber aufbaust und in VBA abfragst, ist es erheblich schneller.