Operatoren

Um mit den Werten in Variablen zu rechnen, gibt es verschiedene Arten von Operatoren.

Arithmetische Operatoren

Die typischen „Taschenrechneroperatoren“ werden „arithmetische Operatoren“ genannt und sind für Zahlen aller Art gedacht.

Sub Arithmetik()
Dim x As Long, y As Long

x = (1 + 2) / 3 'x bekommt den Wert 1
x = x + 1       'Erhöhe x um 1, jetzt also 2
y = x           'Weise y den Wert von x zu (also 2)
y = x - 1       '2 - 1 = 1
y = 2 ^ 8       '2 hoch 8 = 256
x = x * 2       'Weise x den Wert aus x mal 2 zu (also 4)
y = x / 3       'Weise y den Wert aus x geteilt durch 3 zu

Debug.Print y   'Was ergibt das?

End Sub

Wenn wir den obigen Code ausführen, wird 1 zurückgegeben - obwohl doch zuletzt 4 geteilt durch 3 gerechnet wurde! y ist eine Variable vom Typ Long und kann daher keine Nachkommastellen speichern. Wäre y vom Typ Double, wäre 1,33333333333333 ausgegeben worden, und vom Typ Currency wäre es 1,3333.

Zu den arithmetischen Operatoren zählen auch noch \ (Backslash: Nur der Ganzzahlanteil einer Division wird zurückgegeben) und Mod (Modulo: Der „Rest“ einer Division wird zurückgegeben).

Verkettungsoperatoren

Für Strings gibt es die Verkettungsoperatoren, nämlich + und &.

Sub Verkettungen()
Dim text1 As String, text2 As String
Dim zahl1 As Long, zahl2 As Long
Dim ergebnis As Long


text1 = "Vorname "

text2 = "Nachname"
zahl1 = 1
zahl2 = 2

ergebnis = zahl1 & zahl2

Debug.Print text1 + text2   'Vorname Nachname
Debug.Print text1 & text2   'Vorname Nachname
Debug.Print text1 & zahl1   'Vorname 1
Debug.Print zahl1 & zahl2   '12
Debug.Print ergebnis        ' 12

End Sub

Ist einer der beiden Operanden ein String, spielt es keine Rolle, ob man + oder & verwendet, das Ergebnis ist stets eine Verkettung. Wenn allerdings beide Operanden Zahlen sind, wird + als Addition, und & als Verkettung interpretiert. Um Unklarheiten zu vermeiden, sollte man für Verkettungen stets & verwenden.

Im obigen Beispiel geben die beiden letzten Print-Befehle nicht ganz identische Ergebnisse aus: In der letzten Zeile befindet sich ein Leerzeichen vor der  12. Das liegt daran, weil der &-Operator zunächst einen String zurückgibt. In der letzten Zeile wird allerdings ergebnis ausgegeben, welches einen Zahlentyp hat. Das Leerzeichen ist eine Art „Platzhalter“ für ein Vorzeichen; bei negativen Zahlen steht dort ein Minuszeichen. Das Beispiel zeigt, dass man sich um eine „Umrechnung“ zwischen verschiedenen Datentypen nicht kümmern muss. Der Datentyp für das Ergebnis muss nur groß genug sein.

Vergleichsoperatoren

Für Zahlenvergleiche gibt es die Vergleichsoperatoren.

Sub vergleiche()
Dim x As Boolean

x = (1 = 1)     'True  (gleich)
x = (1 < 2)     'True  (kleiner)
x = (1 > 2)     'False (größer)
x = (1 <= 2)    'True  (kleiner gleich)
x = (1 >= 2)    'False (größer gleich)
x = (1 <> 2)    'True  (ungleich)

End Sub

Die Klammern in diesem Beispiel dienen übrigens nur der Übersichtlichkeit. Ohne die Klammern wären die Ergebnisse identisch.

Für Strings gibt es zusätzlich noch den Like−Operator. Mit ihm können Platzhalterzeichen verwendet werden, um zu prüfen, ob ein String einem Muster entspricht:

Debug.Print "Maier" Like "*ai*"
Wahr

Folgende Platzhalterzeichen sind möglich:

Platzhalterzeichen
Symbol Beispiel Ergebnis Verwendung
* Like "*er" findet Maier, Müller, Junker Eine beliebige Anzahl Zeichen
? Like "Ma?er" findet Maier, Majer, Mayer Ein beliebiges einzelnes Zeichen
# Like "1#3" findet 103, 113, 123 Eine einzelne Ziffer
[ ] Like "Ma[iy]er" findet Maier und Mayer, aber nicht Majer Eines der Zeichen in den Klammern
! Like "Ma[!iy]er" findet Majer, aber nicht Maier oder Mayer Ein nicht in den Klammern aufgelistetes Zeichen
- Like "b[a-c]d" findet bad, bbd, bcd Ein Zeichen im angegebenen Bereich

Logische Operatoren

Logische Operatoren geben Wahr oder Falsch zurück. Ist einer der Operanden Null, ist das Ergebnis stets Null.

Sub Logik()
Dim x As Boolean

x = True And False 'False (Operanden müssen beide True sein)
x = True Or False  'True  (Ein Operand muss True sein)
x = Not True       'False (Operand wird negiert)
x = True Xor False 'True  (Operanden müssen unterschiedlich sein)
x = True Eqv False 'False (Operanden müssen gleich sein)
x = True Imp False 'False (True, außer wenn 1. Operand True und 2. False)

End Sub

Mit logischen Operatoren kann man auch bitweise Vergleiche zwischen Zahlen durchführen. Diese Thematik führt über das VBA-Tutorial hinaus. Wer sich mit Binärarithmetik auskennt, dem dürfte das folgende Beispiel als Einstieg genügen:

Sub bitweise()
Dim x As Byte

x = 254
Debug.Print x And 15    'ergibt 14

End Sub

In der Binärarithmetik werden Zahlen häufig hexadezimal, gelegentlich oktal geschrieben. Das ist auch in VBA möglich, indem man &H bzw. &O vor den entsprechenden Zahlenwert schreibt. Anstelle von 255 kann man also auch &HFF oder &O377 schreiben.