aximand
Goto Top

If Then Next

Hallo,

gibt es eigentlich eine Möglichkeit den nächsten Durchlauf einer Schleife vorzeitig zu initiieren?

For i = 1 to 10

 do something

 If Tabelle1.Cells(i , 3).Value = "" Then  next i  

do something more

next i

Hier also, wenn Zelle i,3 nicht leer ist, soll irgendwas weiteres passieren, ist die Zelle leer, soll i weiter gezählt werden.


Grüße
Sascha

Content-Key: 314598

Url: https://administrator.de/contentid/314598

Printed on: April 26, 2024 at 22:04 o'clock

Mitglied: 127103
127103 Sep 07, 2016 at 10:21:44 (UTC)
Goto Top
Hi,

na mit ELSE! Dort halt nix machen statt "do something more".

wtf. Gruß c
Member: Aximand
Aximand Sep 07, 2016 updated at 10:44:57 (UTC)
Goto Top
vielleicht falsch von mir erklärt.

Wenn ein Feld leer ist soll die Schleife weiter hochzählen, wenn nicht, soll sie noch was machen und erst dann hochzählen.

If Then Next
Else
Next

Das funktioniert leider nicht weil dann die Meldung "next without for" kommt
Mitglied: 127103
Solution 127103 Sep 07, 2016 at 10:49:11 (UTC)
Goto Top
Du brauchst doch nur ein next i.

Statt "if leer" machst du if "nicht leer" > do something
und dann "next i"

oder
if leer > "gar nix" else "do something" end if > next i
Member: Biber
Biber Sep 07, 2016 at 10:54:24 (UTC)
Goto Top
Moin cuilster,

du meinst wahrscheinlich so:
For i = 1 to 10

 do something

 If Tabelle1.Cells(i , 3).Value = "" Then  
        Continue For
  End If 

do something more

next i

Mit "continue For" wird die For-Anweisung mit dem nächsten "i"-Iterator fortgeführt.

Grüße
Biber
Member: LordXearo
LordXearo Sep 07, 2016 updated at 10:59:01 (UTC)
Goto Top
In anderen Sprachen wäre das Continue. Da VBA sowas nicht kann mach es mit goto.

Edit: War zu langsam und hatte eine falsche annahme ;)
Mitglied: 127103
127103 Sep 07, 2016 at 11:02:13 (UTC)
Goto Top
Oder in schön ohne Goto oder Continue face-wink

For i = 1 to 10

 do something

 If Tabelle1.Cells(i , 3).Value <> "" Then  
        do something more
  End If 

next i
Member: emeriks
emeriks Sep 07, 2016 updated at 11:04:08 (UTC)
Goto Top
Hi,
einfach ein
i = i + 1
sollte reichen.

For i = 1 to 10
 do something
 If Tabelle1.Cells(i , 3).Value = "" Then i = i + 1  

do something more

next i

bzw.

For i = 1 to 10
 do something
 If Tabelle1.Cells(i , 3).Value = "" Then  
    i = i + 1
  else
    do something more
  end if
next i

je nachdem, wie Du es brauchst.

E.

Edit:
@127103
Ja, nee is klar. Wenn er sowas meinte ....
Member: Aximand
Aximand Sep 07, 2016 at 11:08:40 (UTC)
Goto Top
ja, manchmal findet man vor lauter Wald den Baum nicht. Einfach umdrehen und gut ist. Danke !
Mitglied: 127103
127103 Sep 07, 2016 at 11:11:12 (UTC)
Goto Top
Hi emeriks,

in deinen Vorschlägen zählt der Code übrigens doppelt hoch.
Einmal bei i = i + 1 und bei next i.

i wäre dann 1,3,5 usw...

btw. VBA is kacke^^
Member: emeriks
emeriks Sep 07, 2016 at 11:13:45 (UTC)
Goto Top
in deinen Vorschlägen zählt der Code übrigens doppelt hoch.
Einmal bei i = i + 1 und bei next i.

i wäre dann 1,3,5 usw...
Ja, ist logisch. Ich hatte Deine Frage noch etwas anders interpretiert. So, als würdest Du Werte überspringen wollen.
Mitglied: 127103
127103 Sep 07, 2016 at 11:20:15 (UTC)
Goto Top
Zitat von @emeriks:
Ja, ist logisch. Ich hatte Deine Frage noch etwas anders interpretiert. So, als würdest Du Werte überspringen wollen.

Das ist ne Ausrede. Durch das "nix" machen überspringt er ja den Wert. Mit deinem Code auch den Wert danach.

@Biber Danke fürs formatieren des Codes^^

Gruß c
Member: emeriks
emeriks Sep 07, 2016 at 11:28:35 (UTC)
Goto Top
Das ist ne Ausrede. Durch das "nix" machen überspringt er ja den Wert. Mit deinem Code auch den Wert danach.
Hä? Nein, sowas kann manchmal sehr nützlich sein.

For i = 1 to 10
  select case i
     case 5
        i = i + 1
     case 7
       i = i + 2
  end select  

  msgbox i

  select case i
     case 5
        i = i - 1
     case 7
       i = i - 2
  end select  
   
next i

Denk Dir was aus, wo man sowas in der Art benötigen könnte. Irgendwann in den letzten 30 Jahren hatte ich sowas ä. schon mal dabei. face-wink