Anzeige
Archiv - Navigation
1700to1704
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
Inhaltsverzeichnis

If Bedingung in For Schleife

If Bedingung in For Schleife
08.07.2019 09:14:11
KathrinZ
Hallo zusammen,
ich hab ein kleines Problem mit meiner Bedingung innerhalb einer For Schleife:

Sub Verteilen()
Dim Suchrange As Range, Kopierrange As Range, Einfuegerange As Range
Dim wsOr As Worksheet, wsKo As Worksheet
Dim Zelle As Range
Set wsOr = ThisWorkbook.Worksheets("Upload")
Set wsKo = ThisWorkbook.Worksheets("Input ext.")
Set Kopierrange = wsKo.UsedRange.Columns(2).Offset(9, 0)
For Each Zelle In Kopierrange.Resize(Kopierrange.Rows.Count - 9).Cells
'Wenn Spalte 5 in jeweiliger Zeile leer ist, stoppe die Schleife und gehe zum Ende
If Zelle.Columns(5).Value = "" Then
Exit For
GoTo Ende
Else
'Wenn die Spalte 5 des Bereichs Zelle NICHT leer ist, dann führe aus
'If Zelle.Columns(5).Value  "" Then
Set Suchrange = wsOr.Columns(2).Find(what:=Zelle.Value, LookIn:=xlValues, LookAt:= _
xlWhole)
If Suchrange Is Nothing Then
Zelle.EntireRow.Copy wsOr.Cells(wsOr.Rows.Count, 5).End(xlUp).Offset(1, -4)
'Set Einfuegerange = wsOr.Cells(wsOr.Rows.Count, 3).End(xlUp).Offset(1, -2)
'Zelle.EntireRow.Copy Einfuegerange
'Zelle.EntireRow.Clear
Zelle.EntireRow.Delete
GoTo Weiter
Else
Zelle.EntireRow.Copy Suchrange.Offset(0, -1)
'Zelle.EntireRow.Clear
Zelle.EntireRow.Delete
GoTo Weiter
End If
End If
Weiter:
Next Zelle
Ende:
Set wsOr = Nothing
Set wsKo = Nothing
Set Kopierrange = Nothing
End Sub

Die Bedingung prüft für jeden Bereich, ob Spalte 5 leer ist oder nicht. Wenn die Zelle nicht leer ist, soll der Code innerhalb der Schleife ausgeführt werden. Wenn die Zelle leer ist, soll die Schleife abgebrochen werden und zum Ende des Codes gegangen werden. An eine Do while Schleife hab ich auch schon gedacht, aber ich glaub das funktioniert nicht, weil ich den Bereich ja erst mit Zelle in der For Schleife definiere.
Aktuell läuft es so, dass ich für jede Zeile einmal den Coden ausführen muss. Er macht zwar alles richtig, springt nur nicht in den nächsten Bereich, also in "Next Zelle".
Hat hier jemand eine Lösung?
VG
Kathrin

9
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: If Bedingung in For Schleife
08.07.2019 09:49:02
mmat
Hallo Kathrin,
"Exit For" und "GoTo Ende" sind in DIESEM FALL funktional identisch, es wird ein Sprung zu "Ende:" ausgeführt.
Nur der erste der beiden Befehle wird ausgeführt, der 2. ist überflüssig.
Den vorletzten Absatz hab ich nicht verstanden, warum sollte er nicht in die nächste Zelle springen, solang die Schleife nicht abgebrochen wird?
vg, MM
AW: If Bedingung in For Schleife
08.07.2019 10:01:24
KathrinZ
Hallo MM,
also ich hab GoTo Ende mal beseitigt, da irrelevant - danke!
Er soll immer in die nächste Zelle springen, wenn die Bedingung nicht erfüllt ist, also ein Wert in der Zelle steht bzw. sie nicht leer ist. Ich wiederum verstehe Deine Frage gerade nicht ganz bzw auf welchen Absatz Du Dich beziehst.
VG
Kathrin
Anzeige
AW: If Bedingung in For Schleife
08.07.2019 10:15:46
Daniel
HI
da Zelle in Spalte B liegt, refernziert Zelle.Columns(5) nicht auf Spalte E, sondern auf Spalte F
(.Columns(5)) ist die 5. Spalte des Zellbereichs!
wenn du den Wert aus der Spalte E haben willst, musst du
entweder die Kopierrange auf Spalte A setzen
oder die Zelle mit Zelle.Columns(4) ansprechen oder mit Zelle.Offset(0, 3)
oder die Zelle mit Zelle.EntireRow.Columns(5) ansprechen.
Gruß Daniel
AW: If Bedingung in For Schleife
08.07.2019 11:16:26
KathrinZ
Hallo Daniel,
danke für den Hinweis, hab ich abgeändert. Wobei es in dem Fall egal wäre, weil bei fehlender Kostenstellenplanung sowohl der Wert in Spalte E als auch in F leer wären.
Hast Du eine Idee wie ich die For Schleife mit der If Bedingung verschachtel ohne einen "Next ohne For" Fehler zu kriegen oder für jede Zeile einzeln den Code ausführen muss?
VG Kathrin
Anzeige
AW: If Bedingung in For Schleife
08.07.2019 13:00:46
Rudi
Hallo,
warum löschst du jeweils die Zeile? Das bringt die Schleife durcheinander.
Bsp: Zelle ist B20 und die Zeile wird gelöscht. Next Zelle verweist auf B21, das jetzt aber B20 ist.
Gruß
Rudi
AW: If Bedingung in For Schleife
08.07.2019 13:22:47
KathrinZ
Hi Rudi,
damit das Tabellenblatt am Ende leer ist und alle Werte kopiert wurden, lösche ich die Zeilen danach zur Überprüfung. Ich probiers mal ohne das löschen, ob es dann klappen würde..
VG
Kathrin
AW: If Bedingung in For Schleife
08.07.2019 14:29:43
Pierre
Hallo Kathrin,
nur als Idee: Das löschen der Zeilen ganz zum Schluss machen?
Oder vielleicht kann man den Code "falschrum" laufen lassen, also von unten nach oben, sodass die Schleife eben nicht durcheinander kommt, wenn wie von Rudi bemerkt, sich die Zeilennummern verschieben?
Vielleicht würde das ja den Fehler beheben?
Gruß Pierre
Anzeige
Teste mal
08.07.2019 15:01:37
Rudi

Sub Verteilen()
Dim SuchRange As Range, KopierRange As Range, EinfuegeRange As Range
Dim wsOr As Worksheet, wsKo As Worksheet
Dim Zelle As Range
Set wsOr = ThisWorkbook.Worksheets("Upload")
Set wsKo = ThisWorkbook.Worksheets("Input ext.")
With wsKo
Set KopierRange = .Range(.Cells(10, 2), .Cells(Rows.Count, 5).End(xlUp).Offset(, -3))
End With
For Each Zelle In KopierRange
'Wenn Spalte 5 in jeweiliger Zeile leer ist, stoppe die Schleife und gehe zum Ende
If Zelle.Offset(, 3).Value = "" Then
Exit For
Else
'Wenn die Spalte 5 des Bereichs Zelle NICHT leer ist, dann führe aus
Set SuchRange = wsOr.Columns(2).Find(what:=Zelle.Value, LookIn:=xlValues, LookAt:= _
xlWhole)
If SuchRange Is Nothing Then
Set SuchRange = wsOr.Cells(Rows.Count, 5).End(xlUp).Offset(1, -3)
End If
Zelle.EntireRow.Copy SuchRange.Offset(0, -1)
End If
Next Zelle
Set wsOr = Nothing
Set wsKo = Nothing
Set KopierRange = Nothing
Set SuchRange = Nothing
End Sub

Anzeige
AW: Teste mal
09.07.2019 08:01:26
KathrinZ
Danke Rudi, das klappt!
Damit wäre mein Problem erstmal wieder gelöst, vielen Dank an alle!
VG,
Kathrin

34 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige