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

Forumthread: For next Schleife mit If

For next Schleife mit If
18.01.2005 22:24:37
Wolfgang
Hallo Leute, komm nach Stunden einfach nicht mehr weiter:
mit meinem Code möchte ich einen bestimmten Tabellenbereich (hier A1:F60 = Grundvorlage, kontrolliert kopieren und später verschieben, damit die Formelbezüge genau jeweils um 1 heruntergesetzt werden. So erhalte ich später die gewünschten Gruppierungen mit den jeweiligen Formelbezügen.
hier mein Code ohne Anmerkungen:
Dim x As Integer
Dim i As Integer
x = Worksheets("Mietwertermittlung").Cells(102, 47).Value
For i = 1 To 20
Worksheets("DDienstbarkeiten").Range("A1: f60").Copy
Cells(i, 20).Select
ActiveSheet.Paste
If Cells(i, 20) = 1 Then
msgbox ("Ich habe einen gefunden")
Application.CutCopyMode = False
Selection.Cut Destination:=Cells(i * 60 + 1, 1)
Else
End If
Next i
Zur Funktion meines Teilcodes führe ich aus:
'x steht für ein Kontrollwert, der das Ende der for-next-Schleife bedeutet
Dim x As Integer
'i ist der normale Schleifendurchlauf
Dim i As Integer
x = Worksheets("Mietwertermittlung").Cells(102, 47).Value
For i = 1 To 20
'es wird der Vorlagenbereich kopiert
Worksheets("DDienstbarkeiten").Range("A1: f60").Copy
'es wir um eins nach unten seitlich eingefügt
Cells(i, 20).Select
ActiveSheet.Paste
'so jetzt geht mein Problem los. Wenn der Wert 1 (ein Formelergebnis als Kontrolle. Der Wert 1 soll dafür Sorge tragen, dass der soeben kopierte Bereich wieder gelöscht wir, der Wert 2 soll das Ergebnis an den Zielort weiterreichen, die msgbox(als Programmierkontrolle löst korrekt aus).
If Cells(i, 20) = 1 Then
msgbox ("Ich habe einen gefunden")
'ohne die obige If-Abfrage funktioniert der Code von unten als Abschluss ohne Problem. Nur kommen jetzt alle Kopien anstelle der ausgesuchten.
Application.CutCopyMode = False
Selection.Cut Destination:=Cells(i * 60 + 1, 1)
'nun möchte ich hier ohne auslösendes Ereignis herauskommen
else
end if
Next i
'stattdessen wird nur ein falsches Ereignis an einem in der Spalte (20) übertragen.
Ich weiß momentan nicht mehr, wie ich das gewünschte Ereignis erhalten kann.
Mit freundlichen Grüßen
Wolfgang
Anzeige

2
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Schleife verlassen
18.01.2005 23:47:09
Christoph
Hallo Wolfgang,
so ganz bin ich bei deiner Beschreibung noch nicht durchgestiegen...aber ich vermute, du willst aus der Schleife raus, sobald du "einen gefunden" hast.
Das geht mit "Exit For"
Bsp s.u.
Gruß
Christoph
PS: ich empfehle deine Sheets korrekt zu referenzieren, dann kannst du auch auf die lästigen "Select" und "Activate" verzichten - siehe Basics hier bei Herber

Sub Raus_bei_10()
Dim i as Integer, k as Integer
For i = 1 To 20
k = k + 1
If k = 10 Then
Exit For
End If
Next i
MsgBox k
End Sub

Anzeige
AW: For next Schleife mit If
Wolfgang
Danke Dir Christoph.
Mit exit for habe ich es schon mal versucht. Hat aber bisher nicht geklappt. Doch ich werde es nochmals versuchen. Momentan habe ich aber hier noch leider andere Probleme. Vermutlich mit einer Limitation. Bei ca. 3300 Controls ist plötzlich nichts mehr gegangen. Leider ist jedoch die Seite von Philipp v. Wartburg nicht mehr online. Dann könnte ich der Sache eher auf den Grund gehen. Wäre schaden, wenn ich so kurz vor dem Ziel mein Projekt reduzieren müsste.
Grüße Wolfgang
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

For Next Schleife mit If in Excel VBA


Schritt-für-Schritt-Anleitung

Um eine For Next Schleife mit If in Excel VBA zu erstellen, kannst du folgenden Beispielcode verwenden. Dieser Code kopiert einen bestimmten Bereich und überprüft Bedingungen, um die gewünschte Logik zu implementieren.

Sub BeispielForNextIf()
    Dim x As Integer
    Dim i As Integer
    x = Worksheets("Mietwertermittlung").Cells(102, 47).Value

    For i = 1 To 20
        Worksheets("DDienstbarkeiten").Range("A1:F60").Copy
        Cells(i, 20).PasteSpecial Paste:=xlPasteAll

        If Cells(i, 20).Value = 1 Then
            MsgBox ("Ich habe einen gefunden")
            Application.CutCopyMode = False
            Cells(i * 60 + 1, 1).Cut Destination:=Cells(i * 60 + 1, 1)
            Exit For
        End If
    Next i
End Sub

Dieser Code dient dazu, den Bereich A1:F60 zu kopieren und abhängig vom Wert in der Zelle (in diesem Fall der Zelle in Spalte 20) zu entscheiden, ob der kopierte Bereich an einen anderen Ort verschoben werden soll.


Häufige Fehler und Lösungen

  1. Fehler: Nichts passiert bei der If-Abfrage

    • Lösung: Stelle sicher, dass der Wert in der Zelle korrekt gelesen wird. Füge eine Debug.Print-Anweisung hinzu, um den Wert zu überprüfen.
  2. Fehler: Anwendung stürzt ab oder reagiert nicht

    • Lösung: Überprüfe die Anzahl der Controls oder Objekte, die du gleichzeitig verwendest. Reduziere die Anzahl der Controls, um Performance-Probleme zu vermeiden.
  3. Fehler: Der Code springt nicht wie gewünscht aus der Schleife

    • Lösung: Stelle sicher, dass der Exit For-Befehl innerhalb der If-Abfrage korrekt positioniert ist.

Alternative Methoden

Wenn du die If Schleife in Excel nicht verwenden möchtest, kannst du auch die Select Case-Anweisung verwenden:

Select Case Cells(i, 20).Value
    Case 1
        MsgBox ("Ich habe einen gefunden")
        Application.CutCopyMode = False
        Cells(i * 60 + 1, 1).Cut Destination:=Cells(i * 60 + 1, 1)
        Exit For
    Case Else
        ' Andere Bedingungen
End Select

Diese Methode kann bei mehreren zu prüfenden Bedingungen übersichtlicher sein.


Praktische Beispiele

Hier ist ein weiteres Beispiel, das eine For Schleife mit If-Bedingung demonstriert:

Sub BeispielMitIfBedingung()
    Dim i As Integer
    For i = 1 To 10
        If Cells(i, 1).Value = "Test" Then
            MsgBox "Test gefunden in Zeile " & i
        End If
    Next i
End Sub

In diesem Fall wird überprüft, ob der Wert in der ersten Spalte "Test" ist und eine Meldung wird ausgegeben, wenn dies zutrifft.


Tipps für Profis

  • Vermeide die Verwendung von .Select und .Activate, um deine Makros schneller und stabiler zu machen.
  • Nutze Option Explicit am Anfang deiner Module, um sicherzustellen, dass alle Variablen deklariert sind.
  • Verwende Application.ScreenUpdating = False, um das Flackern der Benutzeroberfläche während der Ausführung des Codes zu vermeiden.

FAQ: Häufige Fragen

1. Was ist der Unterschied zwischen For Next und Do While Schleifen? Die For Next Schleife wird für eine festgelegte Anzahl von Iterationen verwendet, während Do While genutzt wird, wenn die Anzahl der Iterationen nicht vorher bekannt ist.

2. Wie kann ich mehrere Bedingungen in einer If-Anweisung prüfen? Du kannst die Bedingungen mit And oder Or kombinieren, z.B.:

If Cells(i, 20).Value = 1 And Cells(i, 21).Value = "Bedingung" Then
    ' Aktionen
End If

3. Was bedeutet Application.CutCopyMode? Application.CutCopyMode steuert den Cut/Copy-Modus in Excel. Wenn du False zuweist, wird der Kopiermodus deaktiviert.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige