Herbers Excel-Forum - das Archiv

viele Bedingungen in If-Funktionen

Bild

Betrifft: viele Bedingungen in If-Funktionen
von: Eva

Geschrieben am: 03.03.2005 09:55:33
Hallo,
bei folgendem Code werden meiner Prüfung nach nur die ersten Argumente in den if-Funktionen geprüft. Gibt es also eine Maximalanzahl an Argumenten für if-Funktionen? Oder habe ich einen gravierenden Fehler?
Sub MitarbeiterListeAnpassen()
Dim i As Integer
For i = 3 To 5400
Application.DisplayAlerts = False
If Cells(i, 5).Value = "67407" Or Cells(i, 5).Value = "67410" Or Cells(i, 5).Value = "67420" Or Cells(i, 5).Value = "67430" Or Cells(i, 5).Value = "67440" Or Cells(i, 5).Value = "67450" Or Cells(i, 5).Value = "67460" Or Cells(i, 5).Value = "67470" Or Cells(i, 5).Value = "67480" Or Cells(i, 5).Value = "B2407" Or Cells(i, 5).Value = "B2410" Or Cells(i, 5).Value = "B2420" Or Cells(i, 5).Value = "B2430" Or Cells(i, 5).Value = "B2440" Or Cells(i, 5).Value = "B2450" Or Cells(i, 5).Value = "B2460" Or Cells(i, 5).Value = "B2490" Or Cells(i, 5).Value = "B2730" Then
If Cells(i, 7).Value = "DD OP" Or Cells(i, 7).Value = "DD VA" Or Cells(i, 7).Value = "DD FK" Or Cells(i, 7).Value = "DD SL" Or Cells(i, 7).Value = "DD SO" Or Cells(i, 7).Value = "DD SP" Then Call ZeileLöschen(i)
End If
Next i
Application.DisplayAlerts = True
End Sub

Sub ZeileLöschen(i As Integer)
'Probe mit Färben
'Rows(i).Interior.ColorIndex = 33
Rows(i).EntireRow.Delete
End Sub

Dank+Gruß
Eva
Bild

Betrifft: AW: viele Bedingungen in If-Funktionen
von: u_

Geschrieben am: 03.03.2005 10:25:18
Hallo,
derart umfangreiche sind in einer Select Case-Struktur besser untergebracht.
Sub MitarbeiterListeAnpassen()
Dim i As Integer
On Error GoTo ERRHANDLER
For i = 3 To 5400
Application.DisplayAlerts = False
Select Case Cells(i, 5)
Case "67407", "67410", "67420", "67430", "67440", "67450", "67460", "67470", _
"67480", "B2407", "B2410", "B2420", "B2430", "B2440", "B2450", "B2460", _
"B2490", "B2730"
Select Case Cells(i, 7)
Case "DD OP", "DD VA", "DD FK", "DD SL", "DD SO", "DD SP"
Call ZeileLöschen(i)
End Select
End Select
Next i
ERRHANDLER:
Application.DisplayAlerts = True
End Sub

Gruß
Bild

Betrifft: AW: viele Bedingungen in If-Funktionen
von: Eva

Geschrieben am: 03.03.2005 10:41:30
Danke sehr.
Komischerweise bleibt das Problem, dass nicht alle unter Case1 aufgelisteten Argumente mit dem ersten Durchlauf erfasst werden. Ich muss im Moment noch mehrmals den Code starten, um alle mit den betreffenden Argumenten betroffenen Zeilen zu löschen.
Wo liegt hier der Haken?
Sub MitarbeiterListeAnpassen()
Dim i As Integer
On Error GoTo ERRHANDLER
For i = 3 To 5400
Application.DisplayAlerts = False
Select Case Cells(i, 5)
Case "67407", "67410", "67420", "67430", "67440", "67450", "67460", "67470", _
"67480", "B2407", "B2410", "B2420", "B2430", "B2440", "B2450", "B2460", _
"B2490", "B2730"
Select Case Cells(i, 7)
Case "DD OP", "DD VA", "DD FK", "DD SL", "DD SO", "DD SP"
Call ZeileLöschen(i)
End Select
End Select
Next i
ERRHANDLER:
Application.DisplayAlerts = True
End Sub

Sub ZeileLöschen(i As Integer)
'Probe mit Färben
'Rows(i).Interior.ColorIndex = 33
Rows(i).EntireRow.Delete
End Sub

Gruß
Eva
Bild

Betrifft: AW: viele Bedingungen in If-Funktionen
von: Andre

Geschrieben am: 03.03.2005 10:45:39
Das liegt an dem Löschen. Wenn z.B. die Zeilen 4 und 5 diese Kriterien erfüllen und Zeile 4 als erste gelöscht wird, wird Zeile 5 automatisch zu Zeile 4. Der Zähler, der gleichzeitig auch die Zeile angibt ist aber indessen schon eine Zahl weiter, also bei 5.
D.h. die ursprüngliche Zeile 5 wurde gar nicht erst überprüft!
Gruß Andre
Bild

Betrifft: AW: viele Bedingungen in If-Funktionen
von: Hajo_Zi

Geschrieben am: 03.03.2005 10:49:18
Hallo Andre,
beim löschen von Zeilen macht es sich immer gut wenn man von der letzten zur ersten Zeile läuft.
For i = 5400 To 3 Step -1

Bitte keine Mail, Probleme sollten im Forum gelöst werden.
Microsoft MVP für Excel
Das Forum lebt auch von den Rückmeldungen.
Betriebssystem XP Home SP2 und Excel Version 2003 SP1.


Bild

Betrifft: AW: viele Bedingungen in If-Funktionen
von: u_
Geschrieben am: 03.03.2005 10:49:05
Hallo,
lösche rückwärts!
For i=5400 to 3 step -1
Gruß
Bild

Betrifft: Dank an alle! Es funktioniert gut. ot
von: Eva
Geschrieben am: 03.03.2005 12:11:33
mm
Bild

Betrifft: AW: viele Bedingungen in If-Funktionen
von: Andre

Geschrieben am: 03.03.2005 10:41:44
Hi Eva,
das ist etwas umständlich. Versuch´s mal auf diese Weise:
In die Arrays schreibst du deine Argumente und dann mal laufen lassen.
Sub test()
Inhalt = Array(67407, 67410, 67420)
Inhalt2 = Array("DD OP", "DD VA", "DD FK")
For j = 0 To UBound(Inhalt)
If Cells(i, 5).Value = Inhalt(j) Then
For k = 0 To UBound(Inhalt2)
If Cells(i, 7).Value = Inhalt2(k) Then
Call ZeileLöschen(i)
End If
Next k
End If
Next j
End Sub

Das ist überschaubarer.
Gruß Andre
 Bild
Excel-Beispiele zum Thema "viele Bedingungen in If-Funktionen"
Wert aus Spalte C, wenn Spalten A und B Bedingungen erfüllen Beim Erfüllen einer Bedingungen Farbe für 1 Minute
Anzahl von Werten nach verschiedenen Bedingungen. Zeilen zählen, in denen zwei Bedingungen zutreffen
Dem Zellkontextmenü ein Menü "Zahlungsbedingungen" hinzufügen Zelle markieren, wenn zwei Bedingungen erfüllt sind