Zu deiner ersten Frage gibts nicht viel zu erklären. Man kann in VBA auch Excel-Eigene Funktionen verwenden. Hier die Formel Zählenwenn() Diese hat zwei Parameter. Im ersten wird der zu durchsuchende Bereich angegeben, (Hier die Zeile 5 auf dem Zieltabellenblatt), im zweiten der Wert nach dem gesucht wird (hier die der Wert der Zelle c). Die Tabellenblätter haben wir am Beginn des Makros mit Set den Variablen Quelle und Ziel zugewiesen. Mit For Each c In Quelle.Range().Cells durchlaufen wir jede einzelne Zelle im Quellbereich, wobei bei jedem Schleifendurchgang eine andere Zelle der Variablen c zugeordnet ist. Das Ergebnis der Funktion wird dann in die Variable x geschrieben. Nur wenn x=0, also wenn die Formel Zählenwenn() die gesuchte Zahl noch nicht im Zielbereich gefunden hat, wird die Bedingung ausgeführt und die Zahl in den Zielbereich geschrieben.
Wenn du die Zahlen nicht mehr in den Zielbereich schreiben willst, sondern z.B. in eine Listbox einer Userform klappt das mit dieser Funktion natürlich nicht mehr. Dann musst du dir was anderes überlegen, wie du das abprüfst. Man könnte z.B. prüfen ob die Zahl in einem String vorhanden ist. Oder man schreibt sie in ein Array, Letzteres hätte den Vorteil, dass du die Zahlen gleich sortiert ausgeben kannst, falls du das möchtest. Bevor ich dir hier aber Beispiele aufzeigen kann, muss ich schon wissen, was du eigentlich wie ausgeben möchtest.
Die einfachste Antwort zu deiner zweiten Frage: Ersetze End If durch:
Else
c.ClearContents
End If
Dann werden allerdings nicht nur die interessanten doppelten Werte gelöscht sondern auch alle uninteressanten Werte, sodass nur die erstbesten interessanten Werte übrigbleiben. Ist es das was du erreichen willst? Dann kannst du dir zusätzliche Ausgaben an anderer Stelle ganz Sparen und weist sofort welche Zahl an welcher Stelle steht.
Gruß Mr. K.