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 Abbruchvariable innen erhöhen

For Next Schleife Abbruchvariable innen erhöhen
Svent
Hallo, ich habe ein Problem, bei welchem ich über VBA in einer Tabelle in einer For-Next-Schleife Zeilen einfügen muß, die Schleife soll aber bis zum Ende der Tabelle gehen. Folgende Lösung arbeitet nicht zufriedenstellend, wenn zeilen eingefügt werden. Die Variable Last_row wird wird unten in der Schleife
tadellos erhöht, jedoch hat die Erhöhung keinen Einfluß auf die Anzahl der Durchläufe.
Hat jemand eine Idee, wie man es gestalten könnte?
Sub KM_Neurechnen()
start_row = 2
last_row = Cells(Rows.Count, 1).End(xlUp).Row
For n = start_row To last_row
strecke = Cells(n, 5).Value
kma = Cells(n, 6).Value
kme = Cells(n, 7).Value
Rows(n).Select
Selection.Copy
If strecke + kma last_row = last_row + 1        ' Ham wir ne zeile mehr !
End If
MsgBox Str(n) + " " + Str(last_row)
Next n
End Sub
Danke
Svent
Anzeige
AW: For Next Schleife Abbruchvariable innen erhöhen
09.08.2010 18:18:14
mpb
Hallo,
wenn Zeilen eingefügt werden sollen, ist es zweckmäßig, den Bereich von unten nach oben zu durchlaufen. Dann erspart man sich das hochzählen von Variablen.
Ungetestet und um die selects und active-irgendwas bereinigt:
Sub KM_Neurechnen()
start_row = 2
last_row = Cells(Rows.Count, 1).End(xlUp).Row
For n = last_row To start_row Step -1
strecke = Cells(n, 5).Value
kma = Cells(n, 6).Value
kme = Cells(n, 7).Value
If strecke + kma 
Gruß
Martin
Anzeige
AW: For Next Schleife Abbruchvariable innen erhöhen
10.08.2010 04:49:21
Svent
Danke, ich muß das Fahrtenbuch aber von oben nach unten rechnen. Es gibt da noch einen ElseIf der wichtig ist, den ich aber der Einfachheit wegen nicht mitgeschrieben habe. Meine Frage war nicht was zweckmäßig ist, sondern wie man hinkriegt, daß die Abbruchvariable Last_row in der Schleife verändert werden kann und die Schleife dann entsprechend öfter durchlaufen wird.
Vielen Dank
Svent
Anzeige
AW: For Next Schleife Abbruchvariable innen erhöhen
10.08.2010 06:43:11
BoskoBiati
Hallo,
auch wenn man Schleifen nicht während des Laufs erhöhen sollte, hier mal ein Ansatz, der noch einige Fehler beseitigt. Die Zeile wird nach der Fahrt (ansonsten wirds problematisch mit dem n+1) eingefügt und die km-Zahlen angepaßt. Es wäre auch nicht schlecht, wenn in Spalte A eine Eintragung erfolgen würde, da das Makro sonst die letzte Zeile falsch berechnet, wenn neue Zeilen eingefügt werden.
Sub KM_Neurechnen()
Dim last_row As Long
Dim loN As Long
Dim strecke As Long
Dim lokmA As Long
Dim lokmE As Long
Dim loZuviel As Long
Dim loNeukmE As Long
Dim strZiel As String
Dim loStrecke As Long
last_row = Cells(Rows.Count, 1).End(xlUp).Row + 1
loN = 2
Do Until loN = last_row
loStrecke = Cells(loN, 5)
lokmA = Cells(loN, 6)
lokmE = Cells(loN, 7)
Cells(loN, 7) = Cells(loN, 5) + Cells(loN, 6)
If strecke + lokmA 
Gruß
Bosko
Anzeige
AW: For Next Schleife Abbruchvariable innen erhöhen
10.08.2010 11:41:48
BoskoBiati
Hallo,
hier noch ein paar Verschlankungen:
Option Explicit
Sub KM_Neurechnen()
Dim last_row As Long
Dim loN As Long
Dim strecke As Long
Dim lokmA As Long
Dim lokmE As Long
Dim loZuviel As Long
Dim loNeukmE As Long
Dim strZiel As String
Dim loStrecke As Long
last_row = Cells(Rows.Count, 1).End(xlUp).Row + 1
loN = 2
Do Until loN = last_row
loStrecke = Cells(loN, 5)
lokmA = Cells(loN, 6)
lokmE = Cells(loN, 7)
Cells(loN, 7) = Cells(loN, 5) + Cells(loN, 6)
If strecke + lokmA 

Anzeige
AW: For Next Schleife Abbruchvariable innen erhöhen
10.08.2010 19:23:46
Svent
Hallo und recht vielen Dank, man hätte auch selber drauf kömmen können, es mit einer ... do while-Schleife zu versuchen.
Das komische Cells(n,x).select hatte mir der Macrorecorder erzeugt und ich habs einfach so gelassen. Deine Variante ist naürlich die richtige. Ich habe vom VBA nicht viel Ahnung (habe früher mal umfangreichere Sachen im Clipper geschrieben) jedoch die Grundlagen sind ja halbwegs gleich.
Warum muß man eigentlich den Datentyp vorher festlegen, ich habe es ohne Datentyp-Belegung probiert und es funktioniert tadellos.
Nochmals Danke.
Svent
Anzeige
AW: For Next Schleife Abbruchvariable innen erhöhen
10.08.2010 19:52:50
BoskoBiati
Hallo,
mit Festlegung des Datentyps werden Typ-Fehler sofort erkannt, weil das Programm aussteigt und, und, ...
Es gibt ganze Abhandlungen darüber, es macht einfach Sinn.
Gruß
Bosko
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige
Anzeige

Infobox / Tutorial

For Next Schleife Abbruchvariable in VBA korrekt erhöhen


Schritt-für-Schritt-Anleitung

  1. Öffne den VBA-Editor in Excel (drücke ALT + F11).

  2. Erstelle ein neues Modul: Klicke mit der rechten Maustaste auf „VBAProject (DeinWorkbookName)“ und wähle „Einfügen“ > „Modul“.

  3. Füge den folgenden Code ein:

    Sub KM_Neurechnen()
       Dim last_row As Long
       Dim loN As Long
       last_row = Cells(Rows.Count, 1).End(xlUp).Row + 1
       loN = 2
    
       Do Until loN = last_row
           ' Deine Logik hier
           loN = loN + 1 ' Erhöhe loN
       Loop
    End Sub
  4. Passe den Code an: Füge deine spezifische Logik innerhalb der Schleife ein, um Werte zu verarbeiten, z.B. die Berechnung von strecke, kma und kme.

  5. Führe das Makro aus: Klicke auf F5 oder wähle „Ausführen“ im Menü.


Häufige Fehler und Lösungen

  • Schleife läuft nicht korrekt: Wenn du Zeilen einfügst, kann die Schleifenvariable loN nicht richtig erhöht werden. Verwende eine Do While-Schleife, um sicherzustellen, dass alle Zeilen verarbeitet werden, auch wenn neue Zeilen eingefügt werden.

  • Typfehler: Stelle sicher, dass du die Datentypen für Variablen festlegst. Dies hilft, Fehler frühzeitig zu erkennen.


Alternative Methoden

  • Von unten nach oben iterieren: Eine alternative Methode ist, die Schleife rückwärts zu durchlaufen. Dies verhindert Probleme mit dem Hinzufügen von Zeilen während der Iteration. Beispiel:

    For n = last_row To start_row Step -1
       ' Deine Logik hier
    Next n
  • Verwendung von For Each: Wenn du mit Zellbereichen arbeitest, kannst du auch For Each verwenden, um die Lesbarkeit des Codes zu erhöhen.


Praktische Beispiele

Hier ein Beispiel, wie du eine For Next-Schleife in einer VBA-Funktion verwenden kannst:

Sub Beispiel()
    Dim last_row As Long
    last_row = Cells(Rows.Count, 1).End(xlUp).Row

    For n = 2 To last_row
        If Cells(n, 5).Value + Cells(n, 6).Value > 100 Then
            Cells(n, 8).Value = "Über 100"
        End If
    Next n
End Sub

In diesem Beispiel wird geprüft, ob die Summe aus Spalte 5 und 6 größer als 100 ist, und das Ergebnis wird in Spalte 8 geschrieben.


Tipps für Profis

  • Vermeide Select und Activate: Diese Methoden verlangsamen den Code und sind unnötig. Arbeite direkt mit den Zellen, z.B. Cells(n, 1).Value anstelle von Cells(n, 1).Select.

  • Verwende Option Explicit: Dies zwingt dich, alle Variablen zu deklarieren, was die Übersichtlichkeit und Fehlervermeidung verbessert.


FAQ: Häufige Fragen

1. Warum sollte ich die Datentypen in VBA festlegen?
Die Festlegung von Datentypen hilft, Typfehler sofort zu erkennen und verbessert die Lesbarkeit des Codes.

2. Wie kann ich die For Next Schleife anpassen, um bei neuen Zeilen zu reagieren?
Eine Do While-Schleife ist oft die bessere Wahl, da sie flexibler ist und nicht an eine feste Anzahl von Iterationen gebunden ist.

3. Was sind die Vorteile einer rückwärts laufenden Schleife?
Das Durchlaufen von unten nach oben verhindert, dass die Anzahl der zu verarbeitenden Zeilen durch das Einfügen neuer Zeilen beeinflusst wird.

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