[VBA] If-Abfrage mit mehreren or Bedingungen verschlanken
#1
Wunderschönes Wochenende wünsche ich :)...

ich benötige mal eure Hilfe: Ich habe eine If-Abfrage, die eine Zellwert abfragt. Nun können allerdings mehrere Bedingungen die Abfrage auf true setzen. Mein bisheriger Ansatz sprengt mittlerweile den Rahmen und das ist schlecht lesbar und irgendwie auch unschön. Hat wer einen Tipp, wie ich das verschlanken kann? Zumal da in Zukunft möglicherweise noch mehr Bedingungen hinzukommen können.

Code:
            For i = 1 To tipp.Cells.Count - 4
                If LCase(tipp.Cells(i).Offset(0, 1)) = "x" Or LCase(tipp.Cells(i).Offset(0, 1)) = "k" _
                Or LCase(tipp.Cells(i).Offset(0, 1)) = "p" _
                Or LCase(tipp.Cells(i).Offset(0, 1)) = "gni" Or LCase(tipp.Cells(i).Offset(0, 1)) = "r" _
                Or LCase(tipp.Cells(i).Offset(0, 1)) = "t1" Or LCase(tipp.Cells(i).Offset(0, 1)) = "t2" _
                Or LCase(tipp.Cells(i).Offset(0, 1)) = "t3" Then
                arr(i) = tipp.Cells(i).Value
                End If
            Next i

Ach und vielleicht ein wenig offtopic:
Wieso funktioniert  LCase(tipp.Cells(i).Offset(0, 1)) = "t*" für "t1", "t2","t3" etc nicht? 

Danke und Gruß
Antworten Top
#2
Code:
Select case Lcase(…)
   case "p", "x", …
      Tuwas
End Select

(06.05.2023, 12:17)EasY schrieb: Wieso funktioniert  LCase(tipp.Cells(i).Offset(0, 1)) = "t*" für "t1", "t2","t3" etc nicht? 
Der =-Operator beherrscht keine Mustersuche. Einfache Mustersuchen kannst du z.B. mit Like umsetzen..
[-] Folgende(r) 1 Nutzer sagt Danke an Gast für diesen Beitrag:
  • EasY
Antworten Top
#3
Nur ergänzend!
Ich bekomme bei Select Case "p", "x", "k", "gni" … immer Krämpfe in die Finger! Wink

"Schonender" ist dies:
Code:
Dim Cases, Fund
Cases = Split("x k p gni r t1 t2 t3")
Fund = Application.Match("k", Cases, 0)
If IsNumeric(Fund) Then MsgBox "Einer war dabei!"

Wichtig, dass sowohl Cases als auch Fund hier Variant sind!
   
Ein Variant kann nämlich auch einen Fehlerwert aufnehmen, der auftritt, wenn Application.Match nichts findet.
Ich schreibe das, weil man so keine Fehlerbehandlung braucht.
(OK, war'n Insider)
Wink

Gruß Ralf
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. 
Lehre einen Mann zu fischen und du ernährst ihn für sein Leben. (Konfuzius)
[-] Folgende(r) 1 Nutzer sagt Danke an RPP63 für diesen Beitrag:
  • EasY
Antworten Top
#4
(06.05.2023, 12:45)RPP63 schrieb: Nur ergänzend!
Ich bekomme bei Select Case "p", "x", "k", "gni" … immer Krämpfe in die Finger! Wink

"Schonender" ist dies:
Gutes Fingertraining!
Warum verballerst du so viele Variable? 
If Isnumeric(Application.Match("Test", Split(….), 0)) Then…

Ich kriege übrigens immer Krämpfe in den Augen bei leerzeichengetrennten Splits… Wink 

Bin auf Krawall gebürstet heute, ich weiß…
Antworten Top
#5
(06.05.2023, 13:02)EarlFred schrieb: Warum verballerst du so viele Variable?

Ich habe den Wink mit dem Zaunpfahl verstanden!
Aber: Wie sonst hätte ich einen so hübschen Screenshot zur Verdeutlichung der Arbeitsweise anfügen können?
Zitat:Bin auf Krawall gebürstet heute

Heute?  19
Mal davon ab:
Diese Form von Krawall gefällt mir!
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. 
Lehre einen Mann zu fischen und du ernährst ihn für sein Leben. (Konfuzius)
Antworten Top
#6
(06.05.2023, 13:07)RPP63 schrieb: Wink mit dem Zaunpfahl

Heute?
Wink? Ich habe damit zugeschlagen! Big Grin 
Heute merke ich es selbst, sonst ignoriert es mein Unterbewusstsein Wink
Antworten Top
#7
Klasse Lösungen - genau so wollte ich es ... DANKE!
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste