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"