VBA-Programmierung in Microsoft Excel

Tutorial: Excel-Beispiele

VBA-Begriff: If...Then...Else-Anweisung

Führt eine Gruppe von Anweisungen aus, wenn bestimmte Bedingungen erfüllt sind, die vom Wert eines Ausdrucks abhängen.

Syntax

If Bedingung Then [Anweisungen] [Else elseAnweisungen]

Alternativ können Sie die Block-Syntax verwenden:

If Bedingung Then
[Anweisungen]

[ElseIf Bedingung-n Then
[elseifAnweisungen] ...

[Else
[elseAnweisungen]]

End If

Die Syntax für die If...Then...Else-Anweisung besteht aus folgenden Teilen:

Teil Beschreibung
Bedingung Erforderlich. Ein oder mehrere Ausdrücke der beiden folgenden Arten:
  Ein numerischer Ausdruck oder ein Zeichenfolgenausdruck, der True oder False ergibt. Wenn Bedingung den Wert Null hat, wird Bedingung als False interpretiert.
  Ein Ausdruck der Form TypeOf Objektname Is Objekttyp. Objektname ist ein beliebiger Objektverweis, und Objekttyp ist ein beliebiger gültiger Objekttyp. Der Ausdruck ergibt True, wenn Objektname dem Objekttyp entspricht, der durch Objekttyp angegeben wird. Andernfalls ist das Ergebnis False.
Anweisungen Optional in Form eines Blocks, erforderlich in der einzeiligen Variante, die keinen Else-Abschnitt beinhaltet. Eine oder mehrere durch Doppelpunkte getrennte Anweisungen, die ausgeführt werden, wenn Bedingung den Wert True hat.
Anweisung-n Optional. Dieselbe Bedeutung wie Bedingung.
elseifAnweisungen Optional. Eine oder mehrere Anweisungen, die ausgeführt werden, wenn die zugehörige Bedingung (Bedingung-n) True ergibt.
elseAnweisungen Optional. Eine oder mehrere Anweisungen, die ausgeführt werden, wenn keine der Bedingungen (Bedingung-Ausdruck oder Bedingung-n-Ausdruck) True ergibt.

Bemerkungen

Die einzeilige Variante (erste Syntax) bietet sich bei einfachen, kurzen Tests an. Die Blockvariante (zweite Syntax) ist dagegen strukturierter und flexibler als die einzeilige Variante und kann in der Regel leichter gelesen, gepflegt und getestet werden.

Anmerkung°°°Die einzeilige Syntax erlaubt die Ausführung mehrerer Anweisungen als Ergebnis einer If...Then-Entscheidung. Dazu müssen sich aber alle Anweisungen in einer Zeile befinden und durch Doppelpunkte voneinander getrennt sein, wie in der folgenden Zeile:

If A > 10 Then A = A + 1 : B = B + A : C = C + B

Eine Anweisung für einen If-Block muß die erste Anweisung in einer Zeile sein. Vor den Schlüsselwörtern Else, ElseIf und End If der Anweisung ist nur eine Zeilennummer oder Zeilenmarke zulässig. Der If-Block muß mit einer End If-Anweisung beendet werden.

Sie können feststellen, ob es sich bei der Anweisung um einen If-Block handelt, indem Sie den Code untersuchen, der dem Schlüsselwort Then folgt. Befindet sich hinter dem Then in derselben Zeile weiterer Code (außer einem Kommentar), so handelt es sich um einen einzeilige If-Anweisung.

Die Abschnitte Else und ElseIf sind beide optional. In einem If-Block können Sie beliebig viele ElseIf-Abschnitte verwenden, nach einem Else-Abschnitt sind jedoch keine ElseIf-Abschnitte zulässig. If-Blöcke dürfen verschachtelt sein (also selbst wieder If-Blöcke enthalten).

Bei der Ausführung eines If-Blocks (zweite Syntax) wird zunächst Bedingung überprüft. Ergibt Bedingung den Wert True, so werden die Anweisungen im Anschluß an Then ausgeführt. Ergibt Bedingung den Wert False, so werden die ElseIf-Bedingungen (sofern vorhanden) der Reihe nach ausgewertet. Sobald eine dieser Bedingungen True ergibt, werden die Anweisungen im Anschluß an das zugehörige Then ausgeführt. Ergibt keine der ElseIf-Bedingungen True (oder sind überhaupt keine ElseIf-Abschnitte vorhanden), so werden die Anweisungen im Anschluß an Else ausgeführt. Sobald die Anweisungen nach einem Then- oder Else-Abschnitt ausgeführt wurden, setzt das Programm die Ausführung mit der Anweisung im Anschluß an End If fort.

Tip°°°Select Case kann in Situationen sinnvoll sein, in denen bei der Auswertung eines einzelnen Ausdrucks mehrere Entscheidungen getroffen werden müssen. Der Abschnitt TypeOf Objektname Is Objekttyp kann nicht zusammen mit der Select Case-Anweisung verwendet werden.

Anmerkung   TypeOf kann, außer mit Objekttypen, nicht mit harten Datentypen wie z.B. Long, Integer usw., verwendet werden.