Mehrfach Werte prüfen und zuweisen

Hallo,

ich habe folgenden Code:

If a = 1 Then
   b = 2
ElseIf a = 2 Then
   b = 3
ElseIf a = 3 Then
   b = 4
EndIf

Wie kann ich solche If-ElseIf-Verschachtelungen effizienter programmien?

Haltet bitte euch nicht mit den Variablennamen oder den Werten auf. Diese sind nur exemplarisch.

Danke schon mal
Martin

Hallo Martin,

wie wäre es mit:

If a \>= 1 And a 
Gruß, Andreas

oder Select Case

Select Case a
 Case 1
 b = 2
 Case 2
 b = 3
 Case 3
 b = 4
End Select

Gruß, Andreas

Noch mal Select Case

Select Case a
 Case 1 To 3
 b = a + 1
End Select

Gruß, Andreas

Um es zu präzisieren:

Ich möchte Buchstaben in Namen umwandeln. Aus „r“ soll „Rudi“, aus „c“ „Christian“ usw. werden. Insgesamt geht es um 6 Namen die ersetzt werden sollen.

Select - Case kannte ich schon, aber das ist vom Zeilenverbrauch auch nicht besser als mein If - Then.

Durch meinen Hinterkopf wabert die ganze Zeit eine andere Variante, aber ich komm nicht drauf.

Martin

Warum lässt du uns hier erst mit Zahlen jonglieren? Sag doch gleich, dass es um Strings geht. Wie wär’s mit sowas?

Option Explicit
Option Base 1
Sub namen()
 MsgBox ganzerName("r")
 MsgBox ganzerName("c")
End Sub

Function ganzerName(initiale As String) As String
 Dim namen As Variant

 namen = Array("Anna", "Bert", "Cordula", "Dieter", "Elke", "Fritz", "Gerda", "Helmut", "Inge", "Johann", "Käthe", "Lutz", "Manuela", "Norbert", \_
 "Olga", "Paul", "Quina", "Richard", "Siglinde", "Thomas", "Ute", "Viktor", "Walburga", "Xeno", "Ypsilanta", "Zacharias")
 ganzerName = namen(Asc(initiale) - 96)
End Function

Gruß, Andreas

Excel? ohne VBA
Hallo Martin,
falls Du in Excel arbeitest, gibt es noch zwei Möglichkeiten ohne VBA:
1.) Suchen und Ersetzen
2.) „AutoVervollständigen“ in den Optionen aktivieren( wenn die Ergänzung während der Eingabe erfolgen soll )
Freundliche Grüße
Thomas

Hi,

Durch meinen Hinterkopf wabert die ganze Zeit eine andere
Variante, aber ich komm nicht drauf.

Eine Variante, bei der nur die Vorbereitung lang aussieht, die eigentliche Auswahl dann aber sehr kurz:

 Dim Vornamen(5) As String
 Dim Auswahl As String
 Dim Pos As Integer
 Dim Zeichen As String

 Vornamen(0) = "Paul"
 Vornamen(1) = "Berta"
 Vornamen(2) = "Christian"
 Vornamen(3) = "Susi"
 Vornamen(4) = "Viktor"
 Vornamen(5) = "Lara"
 Auswahl = "pbcsvl"

 Zeichen = "C"
 Pos = InStr(Auswahl, LCase(Zeichen)) - 1
 If Pos \>= 0 Then
 Me.Caption = Vornamen(Pos)
 Else
 Me.Caption = "Unbekannt"
 End If

Hast Du an so etwas gedacht?

Es gibt oft sehr viele Möglichkeiten, die gleichwertig sind.

cu Chewpapa

Hallo,

danke für eure kreativen Lösungsvarianten.

Tatsächlich haben manche der Namenskürzel sogar eine Länge von 2 Zeichen - was die Sache weiter verkompliziert. Letzten Endes habe ich mich von Andreas’ und Chewpapas Idee inspirieren lassen. Ich habe jetzt verwendet:

i = InStr(strKürzel, Left(strEingabe & " ", 2))
i = Namen((i + 1) / 2 - 1)

Namen ist das Array mit den Namen, wobei auf Pos. 0 ein Leerstring steht. Das ist nötig weil INSTR im Falle keines Treffers als Resultat 0 liefert.
In strKürzel stehen die Namenskürzel auf eine Einzellänge von 2 Zeichen erweitert (" mwr c d mgg ").

Viele Grüße und nochmal danke.
Martin