Hi Nadine,
bringen wir mal Ordnung in Dein Problem:
Deine Do-While -Schleife ersetzen wir durch eine For-Each-Schleife.
Sinngemäß steht da: "Für jede Zelle im Bereich M3 bis M10"
Dim c As Excel.Range
For Each c In Range("M3:M10")
'*** // TODO
Next c
Dann lösen wir das Problem mit der Spalte. Da die Spaltenermitlung ausserhalb Deiner Schleife steht, bleibt die Variable last (logischerweise) stets gleich.
Die Objektvariable "c" in der For-Each-Schleife ist inerhalb der Schleife eine Zelle je Durchlauf vom Bereich M3 bis M10.
Im ersten Durchlauf erhalten wir also eine Referenz auf Zelle M3, dann M4, M5 usw usf.
Da ich nun weiss, in welcher Zeile ich mich befinde, springe ich nurnoch in die letzte Spalte dieser Zeile und gehe so lange nach links, bis ich auf Widerstand stoße - also überfliege alle Leerezellen, bis eine mit Wert (Achtung: auch ein einzelnes Leerzeichen) oder Formel vorkommt.
Dim c As Excel.Range
For Each c In Range("M3:M10")
'*** // TODO
Cells(c.Row, Cells.Columns.Count).End(xlToLeft).Select
Next c
An dieser Stelle mal den Code testen.
Schreibe Werte in M3 bis M10.
Dann in N3, O4, P5, Q6 usw jeweils ein x.
Dann gehst den gezeigten Code mal in Einzelschritten, via F8, durch.
Sag bescheid wenn Du soweit bist.
|