Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: VBA fortlaufende Schleife

VBA fortlaufende Schleife
11.07.2005 17:28:42
pascal_h
Guten Tag,
Leider habe ich auf mein Post heute Nachmittag keine Antwort mehr erhalten. Ich wäre euch sehr dankbar, wenn mir jemand weiterhelfen könnte.
Ich bin Anfänger und habe mir folgendes Script geschrieben:

Sub DifferenzRechner()
Dim Interval As Integer
Interval = Range("A1")
StartZeit = Range("B1")
While ActiveCell <> ""
ActiveCell.Offset(1, 0).Select
If ActiveCell.Value - StartZeit >= Interval Then
ActiveCell.Offset(-1, 0).Copy [C1]
Exit Sub
End If
Wend
End Sub

Das Script läuft eine Liste ab (B:B) und vergleicht fortlaufend die Differenz der Listenwerten minus "StartZeit"Wert. Sobald die Differenz grösser ist als der Wert "Interval", wird der letzte Minuend in C1 kopiert.
Zum besseren Verständis vielleicht 1. Post ansehen (> Suchen, pascal_h eingeben... und dann kommts)
Wie kann ich nun weitergehen, d.h. nach der Kopie in C1 die Variable StartZeit von B1 nach B2 verschieben, und das ganze Spiel nocheinmal von dort starten. Ich erhalten dann für eben den Wert in B2 ebenfall einen Wert in C2.
Ich bin um jede Hilfe froh! Ich bedanke mich schon jetzt bei euch!
mfg Pascal

Anzeige

3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA fortlaufende Schleife
12.07.2005 11:14:53
Harald
Hallo Pascal,
so ganz verstanden hab ich die Sache auch nicht, aber ich versuch dir mal ein paar Ansätze zu liefern.
Bau eine FOR NEXT Schleife (bzw. mehrere)

Sub DifferenzRechner()
Dim Interval As Integer, n as integer, i as integer
'Schleife Range A1 bis A letzte nichtleere in Spalte A
for n = 1 to cells(rows.count, 1).end(xlup).row
Interval = Range("A" & n)
StartZeit = Range("B" & n)
'dein Vorgang
next n
End Sub

Für diesen Vorgang:
D4 anklicken und activecell.select kannst Du ebenfalls eine FOR NEXT Schleife setzen.
for i = 4 to cell(rows.count, 4).end(xlup).row
if cells(i, 4).value - StartZeit >= Interval Then
statt kopieren mit = arbeiten
cells(gewünschte Startzeilennummer oder variable, 5) = cells(i,4) ggf.offset
Startzeilennummer = Startzeilennummer + 1
und oder next i, next n...was so an Variablen existiert ;-))
D.h. innere und äussere Schleifen nacheinander abarbeiten.
Ein ON ERROR RESUME NEXT nach den Deklarationen springt bei Fehler und/oder nicht gefundenen Werte auf den nächsten Suchbegriff.
Hoffe das hilft und verwirrt nicht noch mehr.
Gruß
Harald
Anzeige
AW: VBA fortlaufende Schleife
12.07.2005 13:31:12
pascal_h
Hallo Harald,
Vielen Dank für den Tip, ich habe mir das mit For Next auch schon überlegt und nun das Script mit Deiner Hilfe umgeschrieben:

Sub Differenzrechner()
Dim Interval As Integer, StartZeit As Integer, n As Integer, i As Integer
Interval = Range("A1")
START:
For i = 3 To Cells(Rows.Count, 1).End(xlUp).Row
If Cells(i, 2).Value - StartZeit >= Interval Then
Cells(i - 2, 3) = Cells(i, 2)
For n = 4 To Cells(Rows.Count, 1).End(xlUp).Row
StartZeit = Range("B" & n)
GoTo START
Next n
End If
Next i
End Sub

Das klappt genau bis zur 2. StartZeit. Weshalb stoppt die zweite For Next Schleife und gibt mir keine weiteren StartZeiten heraus? Also B1 als Startzeit ist gesetzt, B2 wird mir errechnet, jetzt gehts aber nicht mehr weiter.
Jedenfalls schon jetzt vielen Dank! Ich dachte, niemand könne oder wolle mir weiterhelfen!
Gruss Pascal
Anzeige
AW: VBA fortlaufende Schleife
12.07.2005 13:56:20
Harald
Hi Pascal,
es soll hier Leute geben, die bekommen Pickel, wenn sie Select und Goto in einem Code sehen ;-)))) Ich nicht. Bin selbst noch weit weg von vba gut.
Goto geht im Code niemals nach oben, sondern nur nach unten. Daher mein Hinweis mit ON ERROR RESUME NEXT.
Sieht dennoch so aus , als ob du neben der letzten Zelle noch ein zweites Abbruchkriterium einbauen willst.
Wenn ja. Per if Abfrage oder du nimmst dir doch eine Do while....Loop und baust die Fornext Schleife rein.
Wenn nicht, wie gesagt: On error resume next
Gruß und viel Erfolg
Harald
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

VBA fortlaufende Schleife in Excel


Schritt-für-Schritt-Anleitung

  1. Öffne Excel und aktiviere den VBA-Editor:

    • Drücke ALT + F11, um den VBA-Editor zu öffnen.
  2. Erstelle ein neues Modul:

    • Klicke mit der rechten Maustaste auf „VBAProject (DeinWorkbookName)“ und wähle „Einfügen“ > „Modul“.
  3. Füge den Code für den Differenzrechner ein:

    Sub DifferenzRechner()
       Dim Interval As Integer, StartZeit As Integer, n As Integer, i As Integer
       Interval = Range("A1")
       StartZeit = Range("B1")
       For i = 2 To Cells(Rows.Count, 2).End(xlUp).Row
           If Cells(i, 2).Value - StartZeit >= Interval Then
               Cells(i, 3).Value = Cells(i, 2).Value
               StartZeit = Cells(i, 2).Value
           End If
       Next i
    End Sub
  4. Führe das Makro aus:

    • Kehre zu Excel zurück und drücke ALT + F8, wähle DifferenzRechner und klicke auf „Ausführen“.
  5. Ergebnisse überprüfen:

    • Die Werte, die die Bedingungen erfüllen, sollten jetzt in Spalte C erscheinen.

Häufige Fehler und Lösungen

  • Fehler: Das Makro stoppt nach der ersten Iteration.

    • Lösung: Stelle sicher, dass du die StartZeit innerhalb der Schleife aktualisierst. Achte darauf, dass die Schleife nicht vorzeitig abbricht, indem du die Schleifenlogik überprüfst.
  • Fehler: „Typkonflikt“ beim Festlegen von Variablen.

    • Lösung: Überprüfe, ob die Zellen, auf die verwiesen wird, numerische Werte enthalten. Wenn nicht, könnte dies zu einem Typkonflikt führen.

Alternative Methoden

  • Verwendung der Do While Schleife: Du kannst auch eine Do While Schleife verwenden, um die Iteration durchzuführen. Diese Methode ist flexibler und kann bei unbestimmten Bedingungen nützlich sein.
    Sub DifferenzRechnerDoWhile()
       Dim Interval As Integer
       Interval = Range("A1")
       Dim StartZeit As Integer
       StartZeit = Range("B1")
       Dim i As Integer
       i = 2
       Do While Cells(i, 2).Value <> ""
           If Cells(i, 2).Value - StartZeit >= Interval Then
               Cells(i, 3).Value = Cells(i, 2).Value
               StartZeit = Cells(i, 2).Value
           End If
           i = i + 1
       Loop
    End Sub

Praktische Beispiele

  • Beispiel 1: Einfache Differenzberechnung Das oben gezeigte Makro kopiert Werte, wenn die Differenz zwischen StartZeit und den Werten in Spalte B größer oder gleich dem Interval ist.

  • Beispiel 2: Mehrfache Iteration mit der For Next Schleife Verwende mehrere For Next Schleifen, um durch verschiedene Spalten zu iterieren und Werte zu berechnen.

    For n = 1 To Cells(Rows.Count, 1).End(xlUp).Row
       ' Deine Logik hier
    Next n

Tipps für Profis

  • Vermeide Select und Activate: Diese Anweisungen verlangsamen den Code. Arbeite direkt mit den Zellen.

  • Nutze Option Explicit: Füge Option Explicit am Anfang deines Moduls hinzu, um sicherzustellen, dass alle Variablen deklariert werden. Dies hilft, Fehler zu vermeiden.

  • Fehlerbehandlung einfügen: Verwende On Error Resume Next, um Fehler zu ignorieren und den Code weiterlaufen zu lassen, wenn dies sinnvoll ist.


FAQ: Häufige Fragen

1. Warum funktioniert meine For Next Schleife nicht richtig?
Stelle sicher, dass du die Schleifenbedingungen korrekt gesetzt hast und die Variablen, die du verwendest, richtig deklariert sind.

2. Wie kann ich das Programm stoppen, wenn ein Fehler auftritt?
Verwende On Error GoTo Fehlerbehandlung, um zu einer Fehlerbehandlungsroutine zu springen, die du definierst.

3. Kann ich die Schleife vorzeitig verlassen?
Ja, du kannst die Schleife mit Exit For oder Exit Do vorzeitig verlassen, wenn eine bestimmte Bedingung erfüllt ist.

4. Wie kann ich meine Daten effizienter verarbeiten?
Überlege, Arrays zu verwenden, um die Daten zu speichern und dann zu verarbeiten, was die Performance erheblich steigern 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