VBA Code Erklärung

2 Antworten

Vom Beitragsersteller als hilfreich ausgezeichnet

ausgehend von der letzten Zeile, Spalte4=D wird der letzte Eintrag gesucht und dessen Zeile in lngZeile festgehalten. Der Suchwert wird diesem Eintrag gleichgesetzt in strSuchwert

Nach oben wird nun JEDE (Step=-1) Zelle abgeprüft, ob =Zählenwenn(D1:D-letzterEintrag) Wiederholungen findet und diese dann rot eingefärbt.
Dabei ist zu beachten, dass auch mehrere leere Zellen als Wiederholung gesehen werden.
Im Prinzip geht es um die Markierung von Doppeln.

Anm: die Formulierung
For lngZeilenSprung = lngZeile To 1 Step -1
ist mir neu, aber sie funktioniert.

Tipp: füge vor der If-Zeile folgenden Code ein:
Debug.Print lngZeile & " " & lngZeilenSprung & " strSuchwert: " & strSuchwert

und nach End If dann zusätzlich noch
Debug.Print Application.WorksheetFunction.CountIf(Range(Cells(1, 4), Cells(lngZeile, 4)), strSuchwert)

Das druckt den jeweiligen Stand der Variablen bzw das Formelergebnis von Countif() [=Zählenwenn()] im "Direktfenster" aus, so dass Du Schleife für Schleife die Entwicklung verfolgen und Fehler finden kannst!

Sinnvoll könnte auch sein, die Definition
strSuchwert = Cells(lngZeile, 4).Value
zu setzen, dann würde nur der letzte Eintrag auf die Existenz eines Doppels geprüft.


Iamiam  27.08.2012, 16:09

vergiss den letzten Absatz, da hab ich mich vertan!. Dazu müsste man wohl eine weitere Variable einführen.

0
P0wd3r 
Beitragsersteller
 27.08.2012, 23:44

Wow! Vielen Dank genau so hab ich es mir vorgestellt hat mir sehr geholfen =)

0
Iamiam  28.08.2012, 00:18
@P0wd3r

gern geschehen, sowas ist wie Kreuzworträtsel lösen oder Sudoku!
Und danke für den *
Mit debug.print kannst Du übrigens recht komplizierte Abfolgen recht genau auflösen! Sehr nützlich!

0
Iamiam  28.08.2012, 00:52
@Iamiam

interessant ist bei diesem Code auch, dass
lngZeile = Cells(Rows.Count, 4).End(xlUp).Row
nur eine gedachte Cursorbewegung ist, keine wirkliche (da wird nichts ausgewählt, aktiviert oder versetzt. So gehts am schnellsten!).
Ich bevorzuge allerdings der Klarheit wegen genauere Bezeichnungen, zB.
Activesheet.Cells
(...,...).End(xlUp).row

Dazu noch eine Besonderheit: es heißt:

.End(xlToRight) und .End(xlToLeft), aber wieder .End(xldown),

weil nämlich xlLeft und xlTop schon belegt sind für anderes.
Die Hilfe bieter nur recht dürftige Auskunft zu solchen ähnlich-Fragen und gar keine zu Gegensatz- bzw invers-Ausdrücken!

0

Ich würde sagen, er überspringt eine Zeile oder schreibt etwas in eine Zeile.