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

IF schleife mit AND verbinden

Forumthread: IF schleife mit AND verbinden

IF schleife mit AND verbinden
11.08.2025 13:03:25
Buffi
Hallo
ich möchte eine den folgenden Abschnitt gern eine If Abfrage mit zwei Bedienungen machen. Einzeln gehen diese mit Or verknüpft auch aber nicht mit And da kommt
Laufzeitfehler 1004 Anwendungs- objektdefinierter Fehler. Wer kann mir hier weiterhelfen?

Private Sub CommandButton2_Click()

b = 1
C = 1
Letztezeile = Einlesen.Cells(Rows.Count, "D").End(xlUp).Row

For i = 1 To Letztezeile
If (Einlesen.Cells(i, 2).Interior.Color = Einlesen.Range("B31").Interior.Color) And (InStr(1, Einlesen.Cells(i, 4), "-X03") > 0) Then
Einlesen.Cells(i, 1).Value = i
Liste.Range(Liste.Cells(1, b), Liste.Cells(1, b + 3)).Value = Einlesen.Range(Einlesen.Cells(i, 2), Einlesen.Cells(i, 4)).Value
b = b + 3
C = 1
Else
C = C + 1
Liste.Range(Liste.Cells(C, b - 3), Liste.Cells(C, b)).Value = Einlesen.Range(Einlesen.Cells(i, 2), Einlesen.Cells(i, 4)).Value
End If
Next i

End Sub
Anzeige

10
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: IF schleife mit AND verbinden
11.08.2025 13:16:31
daniel
hi

nur um noch mal sicher zu gehen:

das funktioniert:

If (Einlesen.Cells(i, 2).Interior.Color = Einlesen.Range("B31").Interior.Color) Or (InStr(1, Einlesen.Cells(i, 4), "-X03") > 0) Then

das funktioniert:

If (Einlesen.Cells(i, 2).Interior.Color = Einlesen.Range("B31").Interior.Color) Then
IF (InStr(1, Einlesen.Cells(i, 4), "-X03") > 0) Then

und das gibt dir den Fehler in dieser Zeile:

If (Einlesen.Cells(i, 2).Interior.Color = Einlesen.Range("B31").Interior.Color) And (InStr(1, Einlesen.Cells(i, 4), "-X03") > 0) Then


ist das so?

welchen Wert hat denn die Zelle Einlesen.Cells(i, 4), wenn der fehler auftritt?

Anzeige
AW: IF schleife mit AND verbinden
11.08.2025 14:37:44
MCO
Mahlzeit!

Folgende Logik hab ich dir mal gebaut:

Alle Zeilen, in denen in Spalte "A" ein Wert steht werden geprüft, ob in Spalte "D" "-X" vorkommt.
Dann werden die 3 Zeichen genommen und im Sheet (z.B. X03) die Spalten "B-D" der Zeile am Ende reinkopiert.

Easy.
Noch hast du aber gar nicht alle Sheets angelegt, was dann bei Sheets ab X04 zum Fehler führt.

Also hab ich noch ne funktion eingebaut, die direkt ein neues sheet anlegt, falls nicht vorhanden.

Hier der Code.
Sub test()

Dim cl As Range
Dim vorhanden As Long, x As Long
Dim sh_Wahl As String
Dim sh As Worksheet

For Each cl In Einlesen.Range("A:A").SpecialCells(xlConstants)
vorhanden = InStr(cl.Offset(0, 3).Value, "-X")
If vorhanden > 0 Then
' Reiternamen bestimmen
sh_Wahl = Mid(cl.Offset(0, 3).Value, vorhanden + 1, 3)

' Prüfen, ob Blatt existiert, sonst anlegen
On Error Resume Next
Set sh = ThisWorkbook.Sheets(sh_Wahl)
On Error GoTo 0
If sh Is Nothing Then
Set sh = ThisWorkbook.Sheets.Add(After:=ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count))
sh.Name = sh_Wahl
End If

' Daten kopieren
With sh
x = .Cells(.Rows.Count, "A").End(xlUp).Row + 1
Einlesen.Range(cl.Offset(0, 1), cl.Offset(0, 3)).Copy .Cells(x, "A")
End With

' Reset für nächsten Schleifendurchlauf
Set sh = Nothing
End If
Next cl
End Sub


Viel Erfolg!
Gruß, MCO
Anzeige
AW: IF schleife mit AND verbinden
11.08.2025 13:28:42
Buffi
Ja das ist so - ich kann mir nicht vorstellen warum.

Gruß Uwe
AW: IF schleife mit AND verbinden
11.08.2025 13:36:58
Buffi
Sorry muß korrigieren hier geht die Abfrage
Sub test()

i = 5
If InStr(1, Einlesen.Cells(i, 4), "-X03") > 0 Then
Cells(1, 2) = "ja"
Else
Cells(1, 2) = "nein"
End If
End Sub

Und ohne diese Zeile
und ohne diese Zeile gehts auch
Private Sub CommandButton2_Click()

b = 1
C = 1
Letztezeile = Einlesen.Cells(Rows.Count, "D").End(xlUp).Row

For i = 1 To Letztezeile
If (Einlesen.Cells(i, 2).Interior.Color = Einlesen.Range("B31").Interior.Color) Then

Einlesen.Cells(i, 1).Value = i
Liste.Range(Liste.Cells(1, b), Liste.Cells(1, b + 3)).Value = Einlesen.Range(Einlesen.Cells(i, 2), Einlesen.Cells(i, 4)).Value
b = b + 3
C = 1
Else
C = C + 1
Liste.Range(Liste.Cells(C, b - 3), Liste.Cells(C, b)).Value = Einlesen.Range(Einlesen.Cells(i, 2), Einlesen.Cells(i, 4)).Value
End If
Next i

End Sub


Wenn ich das so schreibe wie du
If (Einlesen.Cells(i, 2).Interior.Color = Einlesen.Range("B31").Interior.Color) Then
IF (InStr(1, Einlesen.Cells(i, 4), "-X03") > 0) Then

Kommt der gleiche Fehler

Gruß Uwe
Anzeige
AW: IF schleife mit AND verbinden
11.08.2025 13:41:05
daniel
da wo es geht, zeigst du mir den ganzen Code und da wo es nicht geht , nur das fragment.
warum zeigst du auch hier nicht den ganzen Code?

btw funktionierender Code ist immer ein Zusammspiel von Code und Tabelle.
wenn etwas nicht erklärlich ist, solltst du immer die Datei mit hochladen, damit wir uns beides anschauen können und auch genau prüfen können, in welchen Fällen der Fehler wann eintritt.

ist wie beim Arzt. Der Patient muss zum Arzt. Ferndiagnose per Telefon mit einer dritten Person ist immer schwierig.
Anzeige
AW: IF schleife mit AND verbinden
11.08.2025 14:03:13
Buffi
Ok ist verständlich
hier die Datei
https://www.herber.de/bbs/user/178567.xlsm

Das als Info.
ich möchte aus dem Reiter sheet die Daten in die einzelnen Reiter sortieren. Im Code ist nur erstmal suche die Zeile blau und kopiere diese, wenn in der Cells( i,4)
diese mit -x03 übereinstimmt nach einem Reiter - hier X3.
Das Auslesen in einen Reiter _Alles- funktioniert aber eben nicht nach den einzelnen Reiter.
Vielleicht doof erkläret aber so solls werden.

Hinweis - der im Modul1 stehenden Skript ist nur testmäßig und ist im Programm nicht aktiv. Als spätere Verwendung.

Gruß Uwe
Anzeige
AW: IF schleife mit AND verbinden
11.08.2025 14:22:12
daniel
das Makro Commandbutton2 läuft fehlerfrei durch.
ich verstehe dein Problem nicht.
Deine Beispieldatei sollte schon den Fehler für mich nachvollziehbar enthalten und du müsstest mir auch genau beschreiben, was ich tun muss um den Fehler zu reproduzieren.

Gruß Daniel
AW: IF schleife mit AND verbinden
11.08.2025 14:43:54
daniel
naja, "Nur" die beiden Logikbegriffe gewechselt ist gut.

OR erhöht die Anzahl der WAHR-Ergebnisse
AND erniedrigt die Anzahl der WAHR-Ergebnisse.

das Problem ist die Variable b

diese setzt du auf den Startwert 1
im WAHR-Teil wird b immer um 3 erhöht.
im FALSCH-Teil verwendest du aber b-3

wenn jetzt der FALSCH-Teil (also das Else) beim ersten Umlauf der Schleife aktiv wird, dann passiert folgendes:
- b ist 1, weil es noch nie erhöht wurde
- b minus 3 ist -2 und -2 darfst du nicht als Spaltennummer in Cells verwenden, weil es keine Spaltennummern kleiner 1 gibt.

das wäre die Fehlerursache.
hilft dir das weiter?
du musst also schauen, was mit b passiert.

Gruß Daniel
Anzeige
AW: IF schleife mit AND verbinden
11.08.2025 16:49:24
Buffi
Perfekt - Danke das hilft ungemein. Das ist der Ansatz. Ja und der Fehler ist jetzt klar - ich habe den Wald vor lauter Bäume nicht gesehen. Danke für deine Hilfe und Geduld.

Gruß Uwe
Anzeige
Anzeige
Live-Forum - Die aktuellen Beiträge
Datum
Titel
14.05.2026 13:31:09
14.05.2026 09:50:42
13.05.2026 19:14:18