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

If-Schleiche mit 2 mal For-Schleife

Forumthread: If-Schleiche mit 2 mal For-Schleife

If-Schleiche mit 2 mal For-Schleife
29.05.2007 14:06:00
julia
Hallo zusammen!!
Bin grad auf noch ein Problem gestoßen, das ich schon mal früher hatte, konnte aber damals es auf einem anderen Weg lösen. Es geht um Schleife-in Schleife -in Schleife.
Follgendes:
Ich habe zwei Vetoren x(i) und y(j), die unterschiedlich lang sind i=1,...4 und j=1,....6. Beide müssen
auf 2 verschidenen Bedingungen geprüfet werden.
Wenn x(i)=0 für alle i UND wenn y(j)>=0 für alle j, dann soll die Meldung "Stop" kommen und die Scleife soll verlasst werden.
ich dachte mir, es würde so funktionieren:

Sub beispiel()
Dim x#(), y#(), i%, j%
ReDim x(4)
For i=1 To 4
x(i)=Cells(1+i)
Next
ReDim y(6)
For j=1 To 6
y(j)=Cells(2+j)
Next
For i = 1 To 4
If x(i) = 0  And For j=1 To 6
If y(j)>=0 Then
MsgBox "Stop", vbInformation, "Anweisung"
Exit For
End If
Next j
Next i
End Sub


Klappt aber natürlich nicht, ein Syntaxfehler, weiss aber nicht, wie es richtig sein soll.
Danke im Voraus

Anzeige

11
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: If-Schleiche mit 2 mal For-Schleife
29.05.2007 14:09:00
michael
hi julia :-))
was sofort zu sehen ist :-)
next j und next i ist vertauscht :-))
gruss nighty

AW: If-Schleiche mit 2 mal For-Schleife
29.05.2007 14:21:00
julia
Hallo nighty,
daran liegt es aber nicht, diese Zeile
If x(i) = 0 And For j=1 To 6
erscheint in rot, d. h. dass da ein Syntaxfehler vorliegt.
Gruß
Julia

Anzeige
AW: If-Schleiche mit 2 mal For-Schleife
29.05.2007 14:28:58
Rudi
Hallo,

Sub beispiel()
Dim x#(), y#(), i%, j%, testwert As Boolean
ReDim x(4)
For i = 1 To 4
x(i) = Cells(1 + i)
Next
ReDim y(6)
For j = 1 To 6
y(j) = Cells(2 + j)
Next
For i = 1 To 4
If x(i) = 0 Then
For j = 1 To 6
testwert = testwert Or y(i) >= 0
Next j
If testwert = True Then
MsgBox "Stop", vbInformation, "Anweisung"
Exit For
End If
End If
Next i
End Sub


Gruß
Rudi
Eine Kuh macht Muh, viele Kühe machen Mühe

Anzeige
AW: If-Schleiche mit 2 mal For-Schleife
29.05.2007 14:57:05
julia
Hallo Rudi,
ich habe soeben Dein Vorschlag erprobt, es funktioniert, aber nicht ganz richtig.
Und zwar, diese Meldung "Stop" kommt jedes mal, wenn die Bedingung für aktuelle i und j erfüllt ist.
Aber diese Meldung soll erst dann kommen, wenn die Bedingung für alle i und für alle j erfüllt ist.
Kurz gesagt, ein Vektor ist nur dann positiv, wenn alle seine Einträge positiv sind, es reicht nicht aus, wenn nur die ersten 2 Zahlen nicht negativ sind.
das war schon immer meine große Schwierigkeit gewesen, dieses problem zu beseitigen.
Aber danke Dir trotzdem!!!
Schöne Grüße
Julia

Anzeige
AW: If-Schleiche mit 2 mal For-Schleife
29.05.2007 14:36:49
Gert
Hallo Julia,
ich hab zwar "null Ahnung" von VBA, aber Dein Beispiel ist "Murks".
Die If...and Abfrage könnte so lauten :
If x(i)=0 And y(j)=1 THEN......
Du solltest auch mal erklären, was die "for next" Schleife bewirken soll.
Erkläre bitte einmal was diese Schleifen berechnen sollen.
mfg
Gert

Anzeige
AW: If-Schleiche mit 2 mal For-Schleife
29.05.2007 14:59:00
julia
Hallo Gert,
seh Dich meinen ersten Beitrag an, darin ist alles erklärt, wofür ich noch die For-Next schleife
brauche.
Gruß
Julia

AW: If-Schleiche mit 2 mal For-Schleife
29.05.2007 15:34:00
mpb
Hallo Julia,
ich vermute, da ist noch ein Gedankenfehler drinne. x(i) kann 4 und y(j) 6 Werte annehmen, es gibt also 24 Kombinationen x(i)/y(j). Du schreibst nun, dass alle x(i)=0 UND alle y(j)>=0 sein sollen. Wenn dies erfüllt ist, soll eine Meldung erfolgen.
Diese Vorgaben haben 2 Konsequenzen:
1. Es wird keine verschachtelte Schleife benötigt. Die beiden Schleifen können nacheinander durchlaufen werden.
2. Es kann keinen Schleifenabbruch geben, da ja erst dann entscheiden werden kann, ob beide Bedingungen für alle x(i) und alle y(j) erfüllt sind, wenn beide Schleifen vollständig durchgeführt wurden. Nur dann, wenn (mindestens) ein x(i) oder ein y(j) eine Bedingung nicht erfüllt, ist ein Schleifenabbruch sinnvoll möglich.
Falls ich Dich nicht richtig verstanden habe, beschreibe noch mal genau, unter welchen Bedingungen die Meldung kommen soll.
Gruß
Martin

Anzeige
AW: If-Schleiche mit 2 mal For-Schleife
29.05.2007 16:15:00
julia
Hallo Martin,
ok, dass der Abbruch in der Schleife nicht nötig ist, sehe ich ein, aber ich glaube, dass man ohne verschachtelten Schleifen nicht auskommt, denn es müssen ja beide bedingungen erfüllt werden, es reicht nicht aus, wenn nur eine wahr ist. In meinem Beispiel ist x=(0,0) und y=(0,0,-1,-6,0).
Ich habe dass jetzt so gemacht

Sub beispiel()
Dim x#(), y#(), i%, j%
ReDim x(2)
For i=1 To 2
x(i)=Cells(1+i)
Next
ReDim y(6)
For j=1 To 6
y(j)=Cells(2+j)
Next
For i = 1 To 2
If x(i) = 0  Then
For j=1 To 6
If y(j)>=0 Then
End If
Next j
MsgBox "Stop", vbInformation, "Anweisung"
End If
Next i
End Sub


Und die Meldung "Stop" erscheint 2 mal, es wird also ignoriert dass y negative Einträge hat.
ich weiss nicht wie es richtig sein muss, bin schon ganz verzweifelt..

Anzeige
AW: If-Schleiche mit 2 mal For-Schleife
29.05.2007 16:40:00
mpb
Hallo Julia,
Du denkst immer noch falsch. In Deinem Konstrukt bewirkt die innere Schleife überhaupt nicht, denn Du gibst ja nicht an, was ausgeführt werden soll, wenn die Bedingung y(j)>=0 erfüllt oder auch nicht erfüllt ist. In der äußeren Schleife ist die Bedingung x(i) = 0 zweimal erfüllt. daher bekommst Du auch die Meldung zweimal, unabhängig davon, was mit y(j) passiert.
Wenn ich Dich richtig verstehe, möchtest Du eine Meldung, wenn alle x(i) = 0 UND alle y(j)> = 0. Was soll denn passieren, wenn diese Bedingungen nicht erfüllt sind, so wie in Deinem Zahlenbeispiel?
Ich versuch's mal trotz der noch offenen Fragen:

Sub beispiel()
Dim x#(), y#(), i%, j%
ReDim x(2)
For i = 1 To 2
x(i) = Cells(1 + i)
Next
ReDim y(6)
For j = 1 To 6
y(j) = Cells(2 + j)
Next
For i = 1 To 2
If x(i)  0 Then
MsgBox "Stop! Bedingung für x(" & i & ") nicht erfüllt.", vbInformation, "Anweisung"
Exit Sub
End If
Next i
For j = 1 To 6
If y(j) 


Etwas obskur erscheint mir übrigens das einlesen der Arrays. In x wird der Bereich B1:C1 und in Y der Bereich C1:H1 eingelesen, soll das so sein?
Gruß
Martin

Anzeige
AW: If-Schleiche mit 2 mal For-Schleife
29.05.2007 17:00:00
julia
Hallo Martin,
du hast recht, jetzt verstehe ich, dass die innere Schleife überhaupt nicht ausgeführt wird.
In meinem Beispiel handelt es sich un ein kompliziertes Algorithmus, wenn die beiden Bedingungen erfüllt sind, dann muss mein Algorithmus stoppen, wenn nicht, dann wird noch weiter gerechnet. Mit den nachfolgenden Teilen bin ich noch nicht fertig.
Deine Variante habe ich ausprobiert, es funktionier, also werde ich dass so übernemen.
Ich hatte tatsächlich einen banalen Denkfehler, es ist wirklich einfach.
Danke Dir vielmals
Schöne Grüße
Julia

Anzeige
Übrigens,...
30.05.2007 00:48:39
Luc:-?
...Julia,
was ist eine If-Schleiche? Falls du eine If-Schleife meinen solltest..., sowas gibt's nicht. Es gibt nur 2 For- und Do- bzw While-Schleifen. If- und Case-Konstrukte sind keine Schleifen, weil sie aus "eigener Kraft" nur einmal durchlaufen wdn.
Gruß Luc :-?
Anzeige
;

Forumthreads zu verwandten Themen

Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige

Infobox / Tutorial

If-Schleife mit verschachtelten For-Schleifen in Excel VBA


Schritt-für-Schritt-Anleitung

Um eine If-Schleife mit zwei verschachtelten For-Schleifen in VBA korrekt zu implementieren, folge diesen Schritten:

  1. Vektoren definieren: Lege die Vektoren x und y fest, die in deinem Excel-Arbeitsblatt gespeichert sind.
  2. Schleifen einrichten: Verwende zwei For-Schleifen, um durch die Werte in x und y zu iterieren.
  3. Bedingungen überprüfen: Setze eine If-Abfrage innerhalb der Schleifen, um die gewünschten Bedingungen zu prüfen.
  4. Meldung ausgeben: Wenn beide Bedingungen erfüllt sind, zeige eine Meldung an und verlasse die Schleifen.

Hier ist ein Beispielcode:

Sub beispiel()
    Dim x() As Double, y() As Double, i As Integer, j As Integer
    Dim stopCondition As Boolean
    ReDim x(4)
    ReDim y(6)

    ' Werte aus dem Arbeitsblatt einlesen
    For i = 1 To 4
        x(i) = Cells(1 + i, 1).Value
    Next i
    For j = 1 To 6
        y(j) = Cells(2 + j, 1).Value
    Next j

    stopCondition = True

    ' Bedingungen prüfen
    For i = 1 To 4
        If x(i) <> 0 Then
            stopCondition = False
            Exit For
        End If
    Next i

    For j = 1 To 6
        If y(j) < 0 Then
            stopCondition = False
            Exit For
        End If
    Next j

    ' Meldung ausgeben
    If stopCondition Then
        MsgBox "Stop", vbInformation, "Anweisung"
    End If
End Sub

Häufige Fehler und Lösungen

  1. Syntaxfehler bei If-Anweisungen: Achte darauf, dass die If-Anweisung korrekt formuliert ist. Eine häufige Fehlerquelle ist das falsche Platzieren von For-Schleifen innerhalb der If-Abfrage.

    Lösung: Stelle sicher, dass jede Schleife und Bedingung korrekt geschlossen wird.

  2. Meldung wird zu oft angezeigt: Wenn die Meldung "Stop" mehrmals angezeigt wird, liegt das häufig daran, dass die Bedingungen nicht richtig gesetzt sind.

    Lösung: Überprüfe die Logik in deinen Schleifen und stelle sicher, dass die Bedingungen richtig umgesetzt sind.


Alternative Methoden

Falls du die Logik ohne verschachtelte Schleifen umsetzen möchtest, kannst du auch die Application.WorksheetFunction verwenden, um die Bedingungen direkt zu überprüfen:

If Application.WorksheetFunction.CountIf(rngX, 0) = UBound(x) Then
    If Application.WorksheetFunction.CountIf(rngY, "<0") = 0 Then
        MsgBox "Stop", vbInformation, "Anweisung"
    End If
End If

Praktische Beispiele

Hier sind einige Beispiele, die dir zeigen, wie du die Bedingungen umsetzen kannst:

  1. Überprüfung auf Nullwerte in x:
If Application.WorksheetFunction.CountIf(x, 0) = UBound(x) Then
    ' Weiterer Code
End If
  1. Überprüfung auf positive Werte in y:
If Application.WorksheetFunction.CountIf(y, "<0") = 0 Then
    ' Weitere Meldung
End If

Tipps für Profis

  • Debugging: Nutze die Debugging-Tools in VBA, um Schritt für Schritt durch deinen Code zu gehen. So kannst du schnell Fehler finden.
  • Verwendung von Collections: Anstatt Arrays zu verwenden, könnten Collections hilfreich sein, um die Daten dynamisch zu verwalten.
  • Code-Kommentare: Füge Kommentare in deinen Code ein, um die Logik klarer zu machen. Dies hilft insbesondere bei komplexen Bedingungen.

FAQ: Häufige Fragen

1. Frage
Was ist der Unterschied zwischen einer If-Schleife und einer For-Schleife?
Antwort: Eine If-Anweisung ist keine Schleife, sondern ein Bedingungstest, der einmal ausgeführt wird. For-Schleifen hingegen wiederholen einen Codeblock mehrfach.

2. Frage
Wie kann ich sicherstellen, dass meine Bedingungen richtig geprüft werden?
Antwort: Verwende Debugging und teste deine Bedingungen einzeln, um sicherzustellen, dass jede Bedingung wie gewünscht funktioniert.

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