Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
872to876
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
872to876
872to876
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

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

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

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

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

Ü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

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige