Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: For Next-Schleife mit Ermitteln letzte Zeile

For Next-Schleife mit Ermitteln letzte Zeile
13.05.2015 02:05:00
Siggi07
Hallo,
nun bastele ich seit geraumer Zeit an einer Schleifenlösung, von der ich dachte, sie wäre relativ einfach, scheint sie aber doch nicht zu sein.
Es handelt sich um eine Liste von Buchungen, die u.a. 2 Spalten enthält für Betrag (Spalte J) und Steuerbetrag (Spalte K). Wenn in K ein Steuerbetrag steht - also 0 - dann soll die Zeile kopiert und unterhalb der Ursprungszeile eingefügt werden, der Steuerbetrag wird in dieser neuen Zeile in Spalt J geschrieben.
Nicht alle Buchungszeilen enthalten einen Steuerbetrag in Spalte K.
Leider funktioniert meine Lösung nur teilweise, wahrscheinlich weil sich die anfangs ermittelte letzte Zeile ja immer weiter nach unten verschiebt. Die Schleife bricht jedenfalls vorher ab, es werden nicht alle Zeilen mit Steuerbetrag kopiert.
Wer weiß die Lösung? Für Unterstützung bedanke ich mich im voraus!
Sub ForNext_test()
Dim i As Long
Dim i2 As Long
i2 = Range("C1048576").End(xlUp).Row
For i = 2 To i2
If Cells(i, 11).Value  0 Then
Rows(i & ":" & i).Copy
Cells(i + 1, 1).Select
Rows(ActiveCell.Row).Insert Shift:=xlDown
Cells(i + 1, 10).Value = Cells(i + 1, 11).Value
Cells(i, 11).Value = 0
Cells(i + 1, 11).Value = 0
i = i + 1
End If
Next
End 

Sub

Anzeige

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: For Next-Schleife mit Ermitteln letzte Zeile
13.05.2015 07:46:21
Daniel
Hi
ja, ist prinzipell richtig.
Wenn du eine Zeile einfügst, müsstest du das Schleifenende um ein eine Zeile erweitern.
Dies ist in einer For-Next-Schleife aber nicht möglich.
wenn das Einfügen und Löschen von Zeilen in einer For-Next-Schleife erfolgt, dann sollte man diese Schleife von unten nach oben (Rückwärts) laufen lassen.
das hat den vorteil, dass die Veränderungen die sich daraus ergeben, in dem Teil der Tabelle stattdfinden den die Schleife schon durchlaufen hat und somit keinen Einfluss auf die Schleife haben.
For i = i2 to 2 Step - 2

Gruß Daniel

Anzeige
AW: For Next-Schleife mit Ermitteln letzte Zeile
13.05.2015 14:17:41
siggi07
Hallo Daniel,
Danke für die Rückmeldung!
Habs probiert, aber wohl nicht gründlich durchdacht. Es wurde nur eine einzige Zeile kopiert (133), insgesamt sind es 146, sonst passierte nichts. Die erste zu kopierende Zeile hätte die 145 sein müssen. Bin erst mal ratlos und probiere es weiter. Vielen Dank nochmal!

Anzeige
layout
13.05.2015 15:45:28
Michael
Mal sehen...
ob das klappt.
M.

AW: For Next-Schleife mit Ermitteln letzte Zeile
13.05.2015 15:52:03
Daniel
vielleicht Step - 1 statt Step - 2 ?
Gruß Daniel

AW: For Next-Schleife mit Ermitteln letzte Zeile
13.05.2015 20:19:10
siggi07
Was lange währt... hat geklappt mit Step -1 und natürlich Löschen der letzten Code-Zeile in der If-Klausel. Das war ein Super-Tipp, hab was dazugelernt, Danke!
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige

Infobox / Tutorial

For Next-Schleife zur Ermittlung der letzten Zeile in Excel VBA


Schritt-für-Schritt-Anleitung

Um eine VBA Schleife bis zur letzten Zeile in Excel zu implementieren, folge diesen Schritten:

  1. Öffne das VBA-Editor-Fenster mit ALT + F11.
  2. Füge ein neues Modul ein, indem du mit der rechten Maustaste auf "VBAProject" klickst und "Einfügen" > "Modul" wählst.
  3. Kopiere den folgenden Code in das Modul:
Sub ForNext_test()
    Dim i As Long
    Dim i2 As Long
    i2 = Range("C1048576").End(xlUp).Row ' Ermittelt die letzte Zeile
    For i = i2 To 2 Step -1 ' Schleife rückwärts
        If Cells(i, 11).Value <> 0 Then ' Überprüft, ob in Spalte K ein Steuerbetrag steht
            Rows(i & ":" & i).Copy
            Cells(i + 1, 1).Select
            Rows(ActiveCell.Row).Insert Shift:=xlDown
            Cells(i + 1, 10).Value = Cells(i + 1, 11).Value
            Cells(i, 11).Value = 0
            Cells(i + 1, 11).Value = 0
        End If
    Next i
End Sub
  1. Führe das Makro aus, um alle relevanten Zeilen zu kopieren.

Häufige Fehler und Lösungen

  • Fehler: Die Schleife bricht vorzeitig ab.

    • Lösung: Stelle sicher, dass du die Schleife rückwärts ausführst (Step -1), damit die Änderungen in der Tabelle die Schleife nicht beeinflussen.
  • Fehler: Nur eine Zeile wird kopiert.

    • Lösung: Überprüfe die Bedingung in der If-Klausel. Stelle sicher, dass der Vergleichsoperator korrekt ist (z.B. <> 0).

Alternative Methoden

Eine alternative Methode zur Verwendung der Excel VBA For-Schleife bis zur letzten Zeile könnte die Anwendung von Do While-Schleifen sein. Hier ein Beispiel:

Sub DoWhile_test()
    Dim i As Long
    i = 2
    Do While Cells(i, 11).Value <> "" ' Solange in Spalte K ein Wert vorhanden ist
        If Cells(i, 11).Value <> 0 Then
            Rows(i & ":" & i).Copy
            Rows(i + 1).Insert Shift:=xlDown
            Cells(i + 1, 10).Value = Cells(i + 1, 11).Value
            Cells(i, 11).Value = 0
            Cells(i + 1, 11).Value = 0
            i = i + 1
        End If
        i = i + 1
    Loop
End Sub

Praktische Beispiele

Hier ist ein praktisches Beispiel, das zeigt, wie du die Excel VBA Schleife über alle Zeilen anpassen kannst. Angenommen, du möchtest nur die Zeilen kopieren, in denen der Betrag in Spalte J größer als 100 ist:

Sub ForNext_test_modified()
    Dim i As Long
    Dim i2 As Long
    i2 = Range("C1048576").End(xlUp).Row
    For i = i2 To 2 Step -1
        If Cells(i, 10).Value > 100 Then ' Betrag in Spalte J
            ' Der restliche Code bleibt gleich
        End If
    Next i
End Sub

Tipps für Profis

  • Nutze Application.ScreenUpdating = False, bevor du das Makro startest, um die Leistung zu verbessern, und setze es am Ende wieder auf True.
  • Benutze Option Explicit am Anfang deines Moduls, um sicherzustellen, dass alle Variablen deklariert sind.
  • Teste deine Codes in einer Kopie deiner Excel-Datei, um Datenverlust zu vermeiden.

FAQ: Häufige Fragen

1. Wie kann ich die letzte Zeile in einem anderen Arbeitsblatt ermitteln? Um die letzte Zeile in einem anderen Arbeitsblatt zu ermitteln, verwende:

i2 = Worksheets("NameDesBlattes").Range("C1048576").End(xlUp).Row

2. Was ist der Vorteil einer Rückwärts-Schleife? Eine Rückwärts-Schleife verhindert, dass das Einfügen oder Löschen von Zeilen die Schleifenindizes beeinflusst, was zu Fehlern führen kann.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige