Um mit den Werten in Variablen zu rechnen, gibt es verschiedene Arten von 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).
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.
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 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.