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

Forumthread: Verschachtelte For-Next Schleife

Verschachtelte For-Next Schleife
11.02.2018 19:53:26
Norbert
Hallo,
ich bekomme eine verschachtelte For-Schleife nicht zum laufen und hoffe das mir jemand helfen kann.
Ausgangssituation:
In Spalte C stehen Datumsangaben welche überprüft werden. Ist das Datum älter als zwei Monate, wird ab Spalte R bis zur letzten befüllten Spalte alle Formeln durch feste Werte ersetzt.
Mein Konstrukt sieht bis jetzt so aus, funktioniert jedoch leider nicht:
Sub Formeln()
Dim AktuellesDatum, Zieldatum As Date
With ActiveWorkbook.Sheets(2) 'Ermittle aktuelles Datum -2 Monate
JuengsteDatum = CDate(.Range("C" & Rows.Count).End(xlUp).Cells.Value)
Zieldatum = (DateAdd("m", -2, AktuellesDatum))
End With
With ActiveWorkbook.Sheets(2) 'Durchlaufe C und entformel wenn nötig ab R
For i = 2 To Cells(Rows.Count, 3).End(xlUp).Row
If Cells(i, 3) 
Weiß jemand Rat?
Beste grüße
Norbert
Anzeige

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

Betreff
Datum
Anwender
Anzeige
AW: Verschachtelte For-Next Schleife
11.02.2018 19:57:19
Norbert
Nachtrag, da man hier (anscheinend) leider nicht editieren kann:
Es hat sich ein Fehler eingeschlichten, ist es natürlich:
AktuellesDatum = CDate(.Range("C" & Rows.Count).End(xlUp).Cells.Value)
In der vierten Codezeile.
Beste Grüße
Norbert
AW: Verschachtelte For-Next Schleife
11.02.2018 20:16:25
Gerd
Hallo Norbert,
teste mal.
Sub Formeln()
Dim JuengsteDatum As Date, Zieldatum As Date, i As Long
With ActiveWorkbook.Sheets(2) 'Ermittle aktuelles Datum -2 Monate
JuengsteDatum = CDate(.Range("C" & Rows.Count).End(xlUp).Cells.Value)
Zieldatum = (DateAdd("m", -2, JuengsteDatum))
'Durchlaufe C und entformel wenn nötig ab R
For i = 2 To .Cells(.Rows.Count, 3).End(xlUp).Row
If .Cells(i, 3) 

Gruß Gerd
Anzeige
AW: Verschachtelte For-Next Schleife
11.02.2018 20:52:38
Norbert
Hallo Gerd,
es kommt die folgende Fehlermeldung:
Userbild
Userbild
Beste Grüße
Norbert
Anzeige
AW: Verschachtelte For-Next Schleife
11.02.2018 21:22:24
Gerd
Hallo Norbert,
nächster Versuch. :-)
Sub Formeln_2_()
Dim JuengsteDatum As Date, Zieldatum As Date, i As Long
With ActiveWorkbook.Sheets(2) 'Ermittle aktuelles Datum -2 Monate
JuengsteDatum = CDate(.Range("C" & Rows.Count).End(xlUp).Cells.Value)
Zieldatum = (DateAdd("m", -2, JuengsteDatum))
'Durchlaufe C und entformel wenn nötig ab R
For i = 2 To .Cells(.Rows.Count, 3).End(xlUp).Row
If .Cells(i, 3) 

Gruß Gerd
Anzeige
AW: Verschachtelte For-Next Schleife
11.02.2018 21:44:09
Norbert
Hallo Gerd,
Danke, das läuft 1a! :-)
Könntest Du mir freundlicherweise erläutern, was in dieser Anweisung genau passiert bzw. weshalb Du auf eine zweite For-Anweisung verzichten konntest?:
With .Range(.Cells(i, 18), .Cells(i, Application.Max(18, .Cells(i, .Columns.Count). _
End(xlToLeft).Column)))
Ich habe immer noch Probleme damit, bei VBA solche verschachtelten Konstrukte zu bauen.
Vielen Dank und beste Grüße
Norbert
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

Anwendung von verschachtelten For-Next Schleifen in VBA


Schritt-für-Schritt-Anleitung

Um eine verschachtelte For-Next Schleife in VBA zu verwenden, folge diesen Schritten:

  1. Öffne den VBA-Editor in Excel mit ALT + F11.

  2. Erstelle ein neues Modul über Einfügen > Modul.

  3. Füge den folgenden Code ein:

    Sub Formeln()
       Dim JuengsteDatum As Date, Zieldatum As Date, i As Long
       With ActiveWorkbook.Sheets(2)
           ' Ermittle das aktuellste Datum in Spalte C
           JuengsteDatum = CDate(.Range("C" & Rows.Count).End(xlUp).Cells.Value)
           Zieldatum = DateAdd("m", -2, JuengsteDatum)
           ' Durchlaufe die Datumsangaben in Spalte C
           For i = 2 To .Cells(.Rows.Count, 3).End(xlUp).Row
               If .Cells(i, 3) < Zieldatum Then
                   ' Ersetze Formeln in Spalte R bis zur letzten befüllten Spalte
                   With .Range(.Cells(i, 18), .Cells(i, Application.Max(18, .Cells(i, .Columns.Count).End(xlToLeft).Column)))
                       .Value = .Value ' Formeln durch Werte ersetzen
                   End With
               End If
           Next i
       End With
    End Sub
  4. Schließe den VBA-Editor und kehre zu Excel zurück.

  5. Führe das Makro aus über Entwicklertools > Makros und wähle Formeln.


Häufige Fehler und Lösungen

  • Fehler: "Typkonflikt"

    • Lösung: Stelle sicher, dass die Datumsangaben in Spalte C im richtigen Format vorliegen. Verwende die Funktion CDate, um sicherzustellen, dass die Werte korrekt in Datumswerte umgewandelt werden.
  • Fehler: "Index außerhalb des gültigen Bereichs"

    • Lösung: Überprüfe, ob die angegebene Spalte (in diesem Fall Spalte 3 für C) tatsächlich Daten enthält. Möglicherweise ist die Tabelle leer oder die Daten sind nicht im erwarteten Format.

Alternative Methoden

Eine nested loop vba-Lösung kann durch die Verwendung von Arrays oder Collections optimiert werden. Anstelle von zwei For-Schleifen könntest du auch eine Filterfunktion verwenden, um nur die relevanten Daten zu bearbeiten.

Ein Beispiel mit einer Collection könnte so aussehen:

Dim Daten As Collection
Set Daten = New Collection

' Füge Daten in die Collection ein
For i = 2 To .Cells(.Rows.Count, 3).End(xlUp).Row
    If .Cells(i, 3) < Zieldatum Then
        Daten.Add .Cells(i, 3).Value
    End If
Next i

Praktische Beispiele

Ein einfaches Beispiel, bei dem Daten in einer Tabelle verarbeitet werden, könnte wie folgt aussehen:

Sub Beispiel()
   Dim i As Long
   Dim ws As Worksheet
   Set ws = ThisWorkbook.Sheets("Tabelle1")

   For i = 1 To 10
       If ws.Cells(i, 1).Value > 100 Then
           ws.Cells(i, 2).Value = "Über 100"
       Else
           ws.Cells(i, 2).Value = "Unter 100"
       End If
   Next i
End Sub

In diesem Beispiel wird in einer Tabelle geprüft, ob die Werte in Spalte A über 100 sind, und entsprechend in Spalte B ein Text ausgegeben.


Tipps für Profis

  • Nutze Fehlerbehandlung mit On Error Resume Next, um Laufzeitfehler zu vermeiden.
  • Dokumentiere deine Variablen und Schleifen ausführlich, um die Lesbarkeit zu erhöhen.
  • Halte den Code so schlank wie möglich, um die Ausführungsgeschwindigkeit zu verbessern, besonders bei komplexen verschachtelten For-Schleifen.

FAQ: Häufige Fragen

1. Was sind verschachtelte For-Schleifen in VBA?
Verschachtelte For-Schleifen sind Schleifen, die innerhalb anderer Schleifen ausgeführt werden. Sie ermöglichen es, mehrdimensionale Datenstrukturen zu durchlaufen.

2. Wie kann ich die Performance meiner Schleifen verbessern?
Vermeide unnötige Berechnungen innerhalb der Schleifen. Nutze Arrays, um Daten zwischenzuspeichern, bevor du sie verarbeitest.

3. Gibt es eine einfache Möglichkeit, mit großen Datenmengen umzugehen?
Ja, du kannst Daten in einem Excel-Bereich in ein Array laden, die Bearbeitungen im Array durchführen und dann die Ergebnisse zurück in den Excel-Bereich schreiben, um die Performance zu erhöhen.

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