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

Beiträge aus den Excel-Beispielen zum Thema "viele Bedingungen in If-Funktionen"