If-Statement mit Platzhalter & Like-Operator (VBA)

Bei einer Suche - beispielsweise auf Google - kann mit Platzhaltern gearbeitet werden. Das Fragezeichen (?) ersetzt dabei ein einzelnes Zeichen, das Sternchen (*) ist ein Platzhalter/eine Wildcard für eine beliebige Zeichenfolge vor, innerhalb oder nach dem Suchbegriff. Verwendet man in VBA ein If-Statement, können ebenfalls solche Platzhalter zur Anwendung gebracht werden. Nehmen wir an, basierend auf einem User-Input im Format "Qx-JAHR" (bspw. Q2-2019) soll eine bestimmte Prozedur für eben dieses Quartal gesteuert werden. Normalerweise ist ein If-Statement oder besser gesagt ein If-Then-Else-Statement wie folgt aufgebaut:

If MeinBegriff = "Q2-2019" Then
Weiterer Code für diesen Fall

ElseIf Weitere Prüfungen
Weiterer Code

End If

Im obigen Fall wird Bei "MeinBegriff" handelt es sich um eine Variable, die vorhin in der Prozedur initialisiert wird. Sie kann das Resultat eines User-Inputs sein oder sich auf einen bestimmten Zellwert beziehen. Generell gilt jedoch: Da sich die Jahreszahl über die Dauer verändern wird, benötigen wir eine dynamische Variante mit Platzhaltern im Format "Q2-20*". Das Gleichheitszeichen (=) wird Operator genannt. Weitere Möglichkeiten sind "<>", ">" oder "<=" etc. Desweiteren gibt es den "Like"-Operator, den wir in diesem Fall verwenden.

Der Code für ein If-Statement mit "Like-Operator" lautet:

If MeinBegriff Like "Q1-20*" Then
Weiterer Code für diesen Fall

ElseIf MeinBegriff Like "Q2-20*" Then
Weiterer Code für diesen Fall

ElseIf MeinBegriff Like "Q3-20*" Then
Weiterer Code für diesen Fall

ElseIf MeinBegriff Like "Q4-20*" Then
Weiterer Code für diesen Fall

End If

Wenn der Wert der Variable "MeinBegriff" also ähnlich (like) ist, wird der entsprechende Fall ausgeübt.

GoTo VBA-Befehl

Mittels dem VBA-Befehl "GoTo" kann in einen beliebigen Bereich des Codes gesprungen werden. Dieser Beitrag zeigt ein Beispiel auf, wie dies funktioniert.

An einer Stelle im Code erfolgt der Befehl "GoTo Zielbereich" und an einem beliebigen anderen Ort steht "Zielbereich:" gefolgt von den entsprechend auszuführenden Befehlen:

Sub MeinGoToMakro()
...
GoTo Zielbereich
...
Zielbereich:
Hier auszuführender Code
...
End Sub

Schauen wir uns ein konkretes Beispiel an: Angenommen das Programm soll zwei mögliche Prozeduren vornehmen - entweder die Befehle in Sektion1 oder diejenigen in Sektion2. Je nach dem, welcher Zelleninhalt in "B1" ist, soll Sektion1 oder Sektion2 ausgeführt werden. In diesem Fall wird das Programm einfach die entsprechende Sektion mit ".Select" auswählen. Meine Exceltabelle sieht wie folgt aus:

GoToSheet

Und der vollständige Code in VBA dazu lautet:

Sub GoToMacro()

If Range("B1") = 1 Then
Range("A5").Select
GoTo Ende
Else: GoTo Sektion2
End If

Sektion2:
Range("A9").Select

Ende:
End Sub

Es gibt zwei Aspekte, die ich genauer hervorheben möchte: Der Doppelpunkt hinter der jeweiligen Sektion ("Sektion2:" und "Ende:") ist zwingend notwendig. Zudem ist der Sprung zu eben diesem "Ende:" in unserem obigen Programm wichtig, damit die Befehle in Sektion2 im Falle von B1 = 1 gar nicht erst ausgeführt werden. Da ganze Teile im Code je nach Szenario übersprungen werden, wird die Ausführungszeit des Makros im Generellen beschleunigt.