Mir sind einige Dinge darin unklar... leider gibts keine Kommentare im Source, was es recht schwierig macht.
Allgemein außerdem der Tip keine Sprungmarken zu verwenden. Sich wiederholende Vorgänge lieber als eigene Funktionen schreiben. Ist sauberer.
ok.. damit ich erst mal verstehe, was du da tust (und warum), folgende Fragen:
Why -1 ? Soweit ich das verstehe, geht es um die Spalte in der die Zuordnung enthalten sein soll... die gibt der User ja selbst ein. Warum ziehst du da 1 ab?
Endgültig verwirrt mich dann
Kann gut sein, dass ich da was überseh, aber mir ists etwas unklar.
Ich bin mir nicht ganz sicher warum du "Spalte + SpaltenZuordnung" verwendest um die Zelle anzusprechen. Du willst doch an der jeweiligen Stelle gezielt auf die Zelle der "Zuordnungsspalte" zugreifen.
Sollte es nicht mit Cells(ReihenSprung, SpaltenZuordnung) eher klappen?
Mir scheint es fast so als würdest du mit diesen zwei Dingen grad im Versuchsbeispiel Glück haben - weil du zuerst eins abziehst und dann (weil im Versuchsbeispiel die zu untersuchende Spalte die 1. ist) wieder 1 dazuzählen. Ich hab sowohl das -1 weggenommen als auch das "Spalte +".
Ergebnis:
Es ist natürlich nicht die Lösung deines Problems.. aber das Ding verhält sich zumindest noch so wie vorher. Ich bin mir also nicht ganz sicher, ob das keine Fehler waren, die sich nur einfach noch nicht gezeigt haben.
Aber wie gesagt: Kann auch gut sein, dass ich mich irre und lasse mich natürlich auch gerne eines Besseren belehren. Bis dahin lass ich den Code aber so.
Zudem glaube ich, dass es besser wäre den Inhalt der Zelle mit .value anzusprechen.
Also
statt
oder wie es in deinem Fall noch steht:
Aber auch das ist nicht der eigentliche Fehler. Es ist nur sauberer IMHO.
Wirklich schwer wirds für mich, nachzuvollziehen warum du "CountIf" einsetzt. Diese Funktion gibt, soweit ich das jetzt rausfinden konnte, zurück WIEVIELE Zellen deiner Auswahl entsprechen. Das bringt aber sowieso insofern IMHO gar nichts, als dass du dadurch eigentlich gar nicht wirklich weißt, WELCHE das nun sind. Dass das Ganze dennoch funktioniert, wundert mich ehrlich gesagt ein wenig.
Ich würde den ganzen Algorithmus ganz anders machen... in zwei Schleifen nämlich. Die erste Schleife geht Zelle für Zelle durch (wie dus ja schon machst) und holt sich immer den Wert der jeweiligen Zelle... darin wird dann nochmals eine "Unterschleife" gestartet, die dann für sich ebenfalls Zelle für Zelle durchgeht und nachsieht ob dieser Wert als solcher ebenfalls woanders vorkommt.
.....
..
Je mehr ich jetzt drüber nachdenke, desto klarer wirds mir:
Du gehst Reihe für Reihe durch, nimmst den Wert immer wieder als einzelnen her und checkst mit der CountIf Funktion von Excel ob dieser Wert öfters vorkommt. Und wenn ja, dann färbst du (obwohl du dann auch IMHO nicht
sondern eher
schreiben solltest... ist zwar eh net möglich, dass der Wert 0 ist (da er sonst gar nicht erst eingelesen hätte werden können).. aber es ist trotzdem sauberer.
Aber genau hier liegt der Fehler:
Du checkst "WAS IST DOPPELT?" und "HAT ZURODNUNGSBEGRIFF [X]".
Und genau das macht er dann auch... er sieht nach, was öfter als 1 Mal gefunden wird und markiert dann all jene von den doppelten Begriffen rot, die als Zuordnung Begriff [X] haben.
In deinem Beispiel:
Du willst alles markieren, was doppelt ist, vorrausgesetzt es hat den Buchstaben "C" in der Zuordnungsspalte. Und zwar ebenfalls mehr als nur einmal.
Dein Makro prüft aber zunächst "was ist doppelt" (zum Beispiel ist ja auch die Zahl 8 doppelt... weil hier ja noch gar nicht berücksichtigt wird, ob die Zahl 8 auch in Zusammenhang mit dem Buchstaben C in der Zuordnungsspalte doppelt vorkommt) und markiert dann bei allen doppelt gefundenen jene, die den Buchstaben "C" drinnen haben.
Deshalb markiert er auch schön brav die Zahl 8 (in Zelle A9). DENN: 8 kommt mehr als einmal vor... und in Zelle A9 hat die Zahl 8 in der Zuordnungsspalte den Buchstaben C.
Ich hoffe dir ist jetzt klar was ich meine.
ALSO:
Verwende, statt die Duplettenprüfung lediglich "CountIf" zu überlassen eine zweite Schleife dafür, die die Zellen für sich nochmals durchgeht.
Beim ersten Fund einer Zahl in Zusammenhang mit der Zuordnung, soll sie deren Zelle in eine Variable schreiben. Findet es sie ein zweites Mal, soll sie sie rot machen (und bei jedem zukünftigem Fund ebenfalls). Am Ende macht Sie noch die rot, die du eben in der Variable gespeichert hast.
Ich weiß, dass das jetzt kompliziert ist.. aber ich kanns net besser beschreiben.