Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1728to1732
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Select Case

Select Case
03.01.2020 01:01:29
Franz
Select Case wert
Case a + b: x
Case c + d: y
End Select
Hallo,
a, b, c und d variieren. Solange diese Variablen variieren wird x und/oder y ausgeführt. Sind aber a + b und c + d zufällig gleich, dann wird nur noch x ausgeführt. Gibt es eine Möglichkeit ohne a, b, c, und d zu vergleichen bei einem Gleichstand der Case-Anweisungen x und y auszuführen? Ich bedanke mich und viele Grüße.

9
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Select Case
03.01.2020 01:27:53
Barbara
Hallo Franz
Sind hier nicht statt "Select Case" zwei if-Abfragen angebracht?
    If Wert = a + b Then
MsgBox "Fall x ist eingetreten."
End If
If Wert = c + d Then
MsgBox "Fall y ist eingetreten."
End If
LGB
AW: Select Case
03.01.2020 09:13:00
Hajo_Zi
If a=wert and b=wert And C=wert and d=wert then
Msgbox "Alle gleich " & wert
end if

AW: Select Case
03.01.2020 09:19:01
GerdL
Hallo Franz,
in der Select-Case-Anweisung wird der nur der erste Fall (von oben nach unten), der zutrifft (= TRUE), ausgeführt u. danach das Konstrukt verlassen.
Gruß Gerd
Anzeige
AW: Select Case
03.01.2020 10:06:10
Franz
Hallo Gerd,
danke für deine Antwort. Gibt es eine Möglichkeit, das Konstrukt nicht zu verlassen, wenn die erste Anweisung = TRUE ist? Danke auch für die anderen Antworten, aber es geht mir um diese doppelte Case-Anweisung, a b c d soll vorher nicht verglichen werden oder es soll auch nicht in eine if-then-else-Schleife umgebaut werden. Vielen Dank.
AW: Select Case
03.01.2020 10:22:36
onur
"Gibt es eine Möglichkeit, das Konstrukt nicht zu verlassen, wenn die erste Anweisung = TRUE ist?" - NEIN.
DAFÜR gibt es ja "Select Case", damit man nicht ein Riesen-Konstrukt auf IF - THEN - ELSE -Basis bauen muss.
Dir bleibt nur die Möglichkeit, für jedes Select Case eine IF -Then (ohne Else)-Anweisung zu nehmen - dann wird nix verlassen.
Anzeige
AW: Select Case
03.01.2020 11:22:08
Barbara
Hallo Franz,
diese Möglichkeit bietet Select Case NICHT.
Die erste zutreffende Case-Anweisung, und sonst keine, wird durchgeführt.
Das steht auch in der VBA-Hilfe eindeutig so.
Deine Idee kann verwirklicht werden, indem die erste Case-Anweisung beide Bedingugen mit AND verknüpft. Man muss dann eben x und y an ZWEI Stellen notieren. Das darf man nicht vergessen, wenn dann mal x oder y geändert werden sollen.
Deshalb habe ich zwei If-Schleifen (und nicht eine if-then-else-Schleife, wie von Dir zitiert!) vorgeschlagen. Da kommt x und y nur EINmal vor.
Die beiden Methoden können in den Sub "Auswahl" und "WennDann" betrachtet werden.
Starte dazu die Sub "Beispiel". Am besten Schrittweise.
Und hier das Beispiel. TATÄÄÄÄÄÄÄ!
Sub Beispiel()
Dim a, b, c, d, Wert
Wert = 7
'Mehrere Anweisungen in eine Zeile werden durch Doppelpunkt getrennt
'x und y kommen zur Anwendung
a = 3: b = 4: c = 1: d = 6
Auswahl Wert, a, b, c, d
WennDann Wert, a, b, c, d
'y wird durchgeführt
a = 147: b = 300: c = 0: d = 7
Auswahl Wert, a, b, c, d
WennDann Wert, a, b, c, d
'Hier wird mangels Voraussetzung nix passieren
a = 147: b = 300: c = 1000: d = 2
Auswahl Wert, a, b, c, d
WennDann Wert, a, b, c, d
End Sub
Sub Auswahl(Vergleichszahl, Zahl1, Zahl2, Zahl3, Zahl4)
Select Case Vergleichszahl
'Nur eine und sonst keine Sache wird durchgeführt.
Case Zahl1 + Zahl2 And Zahl3 + Zahl4
MsgBox "Fall x ist eingetreten"
MsgBox "Fall y ist eingetreten"
Case Zahl1 + Zahl2
MsgBox "Fall x ist eingetreten"
Case Zahl3 + Zahl4
MsgBox "Fall y ist eingetreten"
End Select
End Sub
Sub WennDann(Vergleichszahl, Zahl1, Zahl2, Zahl3, Zahl4)
If Vergleichszahl = Zahl1 + Zahl2 Then
MsgBox "Fall x ist eingetreten."
End If
If Vergleichszahl = Zahl3 + Zahl4 Then
MsgBox "Fall y ist eingetreten."
End If
End Sub
LGB
Anzeige
AW: Spaghetti Case
03.01.2020 11:24:06
GerdL

Sub franz()
Dim wert As Double, a As Double, b As Double, c As Double, d As Double
Select Case wert
Case a + b: MsgBox "x"
Select Case c + d
Case wert: MsgBox "y wie a+b"
End Select
Case c + d: MsgBox "y"
End Select
End Sub

Gruß Gerd
Select Case True
03.01.2020 11:27:43
Anton
Hallo ,
Code in Zwischenablage:

Select Case True  
  Case (a + b) = wert And (c + d) = wert: x  
  Case (a + b) = wert: y
  Case (c + d) = wert: Z
End Select  


mfg Anton
Anzeige
Lieben DANK an alle :)
03.01.2020 11:57:59
Franz
Lieben DANK an alle :) Die Lösungen sind super, allerdings nur für mein kleines Beispiel. Da ich in Wirklichkeit recht viele Case-Anweisungen habe, würde das dann nicht nur Spaghetti-Code ergeben, sondern völliges Chaos :) Ich lass es so und lebe damit, es ist nicht lebensbedrohlich. Danke.

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige