Computer kennen streng genommen keine Zeichen, sondern nur Zahlen. Um ein Zeichen zu speichern, muss ihm ein Zahlenwert zugeordnet sein, und der Computer „übersetzt“ diesen Zahlenwert dann anhand einer Zuordnungstabelle in Buchstaben. Die früher verbreitetste Zuordnungstabelle war ASCII, die den Werten 0-127 Zeichen zuordnete. Später wurde die ASCII-Tabelle um Zeichen im Wertebereich 160-255 ergänzt. Das nannte sich die ANSI-Tabelle. Microsoft ergänzte ANSI wiederum um die Zeichen 128-159 und nannte dies WINDOWS-1252. Bis heute ist dies der Zeichenumfang, der innerhalb VBA zur Verfügung steht. Um aus der folgenden Tabelle den Zeichenwert eines Zeichens auszulesen, muss man den Spalten- und Zeilenwert addieren. „A“ hat also den Zeichenwert 64 + 1 = 65.
Zuordnungstabelle | |||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | ||
ASCII | 32 | ! | " | # | $ | % | & | ' | ( | ) | * | + | , | - | . | / | |
48 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | : | ; | < | = | > | ? | |
64 | @ | A | B | C | D | E | F | G | H | I | J | K | L | M | N | O | |
80 | P | Q | R | S | T | U | V | W | X | Y | Z | [ | \ | ] | ^ | _ | |
96 | ` | a | b | c | d | e | f | g | h | i | j | k | l | m | n | o | |
112 | p | q | r | s | t | u | v | w | x | y | z | { | | | } | ~ | ||
Windows1252 | 128 | € | ‚ | ƒ | „ | … | † | ‡ | ˆ | ‰ | Š | ‹ | Œ | Ž | |||
144 | ‘ | ’ | “ | ” | • | – | — | ˜ | ™ | š | › | œ | ž | Ÿ | |||
ANSI | 160 | ¡ | ¢ | £ | ¤ | ¥ | ¦ | § | ¨ | © | ª | « | ¬ | | ® | ¯ | |
176 | ° | ± | ² | ³ | ´ | µ | ¶ | · | ¸ | ¹ | º | » | ¼ | ½ | ¾ | ¿ | |
192 | À | Á | Â | Ã | Ä | Å | Æ | Ç | È | É | Ê | Ë | Ì | Í | Î | Ï | |
208 | Ð | Ñ | Ò | Ó | Ô | Õ | Ö | × | Ø | Ù | Ú | Û | Ü | Ý | Þ | ß | |
224 | à | á | â | ã | ä | å | æ | ç | è | é | ê | ë | ì | í | î | ï | |
240 | ð | ñ | ò | ó | ô | õ | ö | ÷ | ø | ù | ú | û | ü | ý | þ | ÿ |
Zeichen mit einem Wert kleiner 32 sind sogenannte „Steuerzeichen“, die heute
überwiegend bedeutungslos sind (ASCII stammte aus der Lochkartenzeit). In VBA gibt
es für einige davon noch
Konstanten, von denen
heute nur die Zeichen für den Zeilenumbruch halbwegs interessant wären - wenn sie
sich nicht zu allem Überfluss je nach Betriebssystem unterscheiden würden. Die
Konstante vbNewLine
wählt aber in Abhängigkeit zum Betriebssystem das
„richtige“ Steuerzeichen aus, womit dann auch dieses Problem erledigt wäre.
Office verwendet heute nicht mehr WINDOWS-1252, sondern den UTF-16-Zeichensatz, der jedes Zeichen in zwei Byte speichert, womit über 65.000 Zeichen zur Verfügung stehen. Die ersten 255 Zeichen von UTF-16 sind mit ANSI identisch. Die Zeichen 128-159 (in der Tabelle rot markiert) sind in UTF-16 dagegen nicht mit den Zeichen aus WINDOWS-1252 belegt, sondern mit weiteren Steuerzeichen. Die Nutzung dieser Zeichen kann daher in Extremfällen Probleme verursachen.
Für die folgenden Funktionen, die eine Zeichenfolge zurückgeben, gibt es noch
eine Version mit nachgestelltem „$“ (z. B. Chr$
). Dann ist der
Rückgabewert nicht Variant, sondern String.
Asc(String As String) As Integer
Erwartet einen String als Argument, der mindestens ein Zeichen lang sein muss. Ist er länger, wird nur das erste Zeichen ausgewertet. Für dieses Zeichen wird der Zeichencode gemäß der Zuordnungstabelle zurückgegeben.
Debug.Print Asc("A") 65
Mit AscW
kann der Zeichencode gemäß UTF-16 zurückgegeben werden.
Chr(CharCode As Long) As Variant
Erwartet eine positive Ganzzahl als Argument und gibt das zugehörige Zeichen aus der Zuordnungstabelle als String zurück.
Debug.Print Chr(65) A
Mit ChrW
kann ein Zeichen gemäß UTF-16 zurückgegeben werden. Ist
die Darstellung nicht möglich, wird ein „?“ angezeigt.
Format(Expression As Variant, [Format As String], [FirstDayOfWeek As VbDayOfWeek = vbSunday], [FirstWeekOfYear As VbFirstWeekOfYear = vbFirstJan1]) As Variant
Gibt die Zeichenfolge Expression
wieder zurück. Mit dem Argument
Format
kann der Rückgabewert formatiert werden. Dafür steht eine Reihe
benannter Formate
zur Verfügung.
Debug.Print Format(1000,"Fixed") 1000,00 Debug.Print Format(1000,"Scientific") 1,00E+03
Anstelle eines benannten Formats kann auch ein benutzerdefiniertes Format verwendet werden. Dazu wird für jede Stelle des Ausgabestrings ein sogenanntes Platzhalterzeichen gesetzt, der das Aussehen bestimmt
Andere Zeichen in Format
als die in den
benutzerdefinierten Formaten
definierten werden unverändert angezeigt. Will man eines der obigen Platzhalterzeichen
selbst im Ausgabestring anzeigen, sollte man einen umgekehrten Schrägstrich voranstellen.
Debug.Print Format(1000,"#,000.00 $") 1.000,00 $ Debug.Print Format(1000,"@@@@@@@@@@ \q\m") 1000 qm Debug.Print Format(,"m")
Für das benutzerdefinierte
Datumsformat „w“ gibt es das Argument FirstDayOfWeek
, für das
mit der Aufzählung
VbDayOfWeek
festgelegt werden kann, welcher Wochentag der Erste ist.
Für das benutzerdefinierte
Datumsformat „ww“ gibt es das Argument FirstWeekOfYear
, für das mit
der Aufzählung VbFirstWeekOfYear
festgelegt werden kann, welche Woche des Jahres die Erste ist.
FormatCurrency(Expression As Variant, [NumDigitsAfterDecimal As Long = -1], [IncludeLeadingDigit As VbTriState = vbUseDefault], [UseParensForNegativeNumbers As VbTriState = vbUseDefault], [GroupDigits As VbTriState = vbUseDefault]) As String
Gibt Expression
als Zeichenfolge zurück, die als Währungswert formatiert
ist. Es wird das Währungssymbol aus den Systemeinstellungen verwendet.
Mit NumDigitsAfterDecimal
kann man angeben, wie viele Nachkommastellen
zurückgegeben werden sollen. Hat Expression
mehr Nachkommastellen, wird
gerundet. Bei „−1“ greifen die Systemeinstellungen. Andere negative Zahlen
für NumDigitsAfterDecimal
verursachen einen Fehler.
Mit IncludeLeadingDigit
kann man angeben, ob bei Zahlen kleiner 1
eine führende 0 angezeigt wird, mit UseParensForNegativeNumbers
, ob
bei negativen Zahlen Klammern anstelle eines Minus angezeigt wird und mit
GroupDigits
, ob Zahlen ab 1.000 in Dreiergruppen mit Trennzeichen
gruppiert werden sollen.
Hinweis: Die Format-Funktion bietet
weitergehende Möglichkeiten als die FormatCurrency
-Funktion. Lediglich
das Währungssymbol kann dort nicht aus den Systemeinstellungen übernommen werden.
Debug.Print FormatCurrency(1000) 1.000,00 €
FormatDateTime(Expression As Variant, [NamedFormat As VbDateTimeFormat = vbGeneralDate]) As String
Gibt Expression
als Zeichenfolge zurück, die als Datum/Zeit formatiert
ist. Das genaue Aussehen kann über NamedFormat
bestimmt werden, für
das die Aufzählung VbDateTimeFormat
zur Verfügung steht.
Hinweis: Die Format-Funktion bietet
weitergehende Möglichkeiten als die FormatDateTime
-Funktion.
FormatNumber(Expression As Variant, [NumDigitsAfterDecimal As Long = -1], [IncludeLeadingDigit As VbTriState = vbUseDefault], [UseParensForNegativeNumbers As VbTriState = vbUseDefault], [GroupDigits As VbTriState = vbUseDefault]) As String
Gibt Expression
als String zurück, der als Zahl formatiert ist.
Mit NumDigitsAfterDecimal
kann man angeben, wie viele Nachkommastellen
zurückgegeben werden sollen. Hat Expression
mehr Nachkommastellen, wird
gerundet. Bei „−1“ greifen die Systemeinstellungen. Andere negative Zahlen
für NumDigitsAfterDecimal
verursachen einen Fehler.
Mit IncludeLeadingDigit
kann man angeben, ob bei Zahlen kleiner 1
eine führende 0 angezeigt wird, mit UseParensForNegativeNumbers
, ob
bei negativen Zahlen Klammern anstelle eines Minus angezeigt wird und mit
GroupDigits
, ob Zahlen ab 1.000 in Dreiergruppen mit Trennzeichen
gruppiert werden sollen.
Hinweis: Die Format-Funktion bietet
weitergehende Möglichkeiten als die FormatNumber
-Funktion.
FormatPercent(Expression As Variant, [NumDigitsAfterDecimal As Long = -1], [IncludeLeadingDigit As VbTriState = vbUseDefault], [UseParensForNegativeNumbers As VbTriState = vbUseDefault], [GroupDigits As VbTriState = vbUseDefault]) As String
Gibt Expression
als Zeichenfolge zurück, die als Prozentzahl
formatiert ist.
Mit NumDigitsAfterDecimal
kann man angeben, wie viele Nachkommastellen
zurückgegeben werden sollen. Hat Expression
mehr Nachkommastellen,
wird gerundet. Bei „−1“ greifen die Systemeinstellungen. Andere negative
Zahlen für NumDigitsAfterDecimal
verursachen einen Fehler.
Mit IncludeLeadingDigit
kann man angeben, ob bei Zahlen kleiner 1
eine führende 0 angezeigt wird, mit UseParensForNegativeNumbers
, ob
bei negativen Zahlen Klammern anstelle eines Minus angezeigt wird und mit
GroupDigits
, ob Zahlen ab 1.000 in Dreiergruppen mit Trennzeichen
gruppiert werden sollen.
Hinweis: Die Format-Funktion bietet
weitergehende Möglichkeiten als die FormatPercent
-Funktion.
Debug.Print FormatPercent(1.1) 110,00%
InStr([Start As Long], String1 As Variant, String2 As Variant, [Compare As VbCompareMethod = vbBinaryCompare]) As Long
Prüft, ob String2
in String1
enthalten ist. Trifft
es zu, gibt die Funktion zurück, an der wievielten Stelle die gesuchte Zeichenfolge
das erste Mal auftritt. Ansonsten wird „0“ zurückgegeben.
Mit Start
kann der Funktion eine positive Zahl übergeben werden,
die angibt, ab der wievielten Stelle innerhalb von String1
nach
String2
gesucht werden soll. Darüber hinaus kann noch mit dem Argument
Compare
ein Wert aus der Aufzählung
VbCompareMethod
ausgewählt werden, um anzugeben, wie verglichen werden soll. Wird Compare
angegeben, muss zwingend auch Start
angegeben werden.
Debug.Print InStr("Fliegen fliegen hinter Fliegen", "fliegen") 9 Debug.Print InStr(1, "Fliegen fliegen hinter Fliegen", "fliegen", vbTextCompare) 1
InStrRev(StringCheck As String, StringMatch As String, [Start As Long = -1], [Compare As VbCompareMethod = vbBinaryCompare]) As Long
Mit der InstrRev
-Funktion kann man prüfen, ob StringMatch
in StringCheck
enthalten ist. Trifft es zu, gibt die Funktion zurück,
an der wievielten Stelle die gesuchte Zeichenfolge das letzte Mal auftritt.
Ansonsten wird „0“ zurückgegeben.
Mit Start
kann der Funktion eine positive Zahl übergeben werden,
die angibt, ab der wievielten Stelle von Links innerhalb von StringCheck
nach StringMatch
gesucht werden soll. Wird Start
nicht
angegeben oder auf „-1“ gesetzt, wird von hinten gesucht. Andere Werte als positive
Zahlen oder „-1“ verursachen einen Fehler.
Mit dem Argument Compare
kann noch ein Wert aus der Aufzählung
VbCompareMethod
ausgewählt werden, um anzugeben, wie verglichen werden soll.
Achtung: Obwohl InStrRev
der Funktion
InStr
sehr ähnelt, sind die Argumente anders
angeordnet.
Debug.Print InStrRev("Fliegen fliegen hinter Fliegen","Fliegen") 24 Debug.Print InStrRev("Fliegen fliegen hinter Fliegen","Fliegen", 20) 1
LCase(String As String) As Variant
LCase
wandelt alle Großbuchstaben im Argument String
in Kleinbuchstaben um. Alle anderen Zeichen werden unverändert zurückgegeben.
Debug.Print LCase("17 Euro") 17 euro
Left(String As Variant, Length As Long) As Variant
Gibt von String
den linken Teil zurück, und zwar so viele Zeichen,
wie in Length
angegeben. Length
darf nicht negativ sein.
Debug.Print Left("Donaudampfschiff", 5) Donau
Len(Expression As Variant) As Long
Sofern Expression
den Datentyp String
hat, wird die
Länge des Strings zurückgegeben. Bei anderen Datentypen wird der
Speicherbedarf von
Expression
zurückgegeben.
Debug.Print Len("ABC") 3
LenB
funktioniert identisch. Ist Expression
allerdings
vom Datentyp String
, werden je Zeichen zwei Byte gezählt, weil
LenB
Zeichen gemäß UTF-16 berechnet.
LTrim(String As Variant) As Variant
Sofern String
führende Leerzeichen hat, werden diese entfernt.
Der Rest des Strings wird zurückgegeben.
Debug.Print LTrim(" ABC") ABC
Mid(String As Variant, Start As Long, [Length As Long]) As Variant
Extrahiert aus String
eine Teilzeichenkette, und zwar ab
Start
so viele Zeichen, wie mit Length
angegeben.
Start
muss positiv sein. Fehlt Length
, wird
String
bis zum Ende ausgegeben. Length
darf nicht
negativ sein.
Debug.Print Mid("Donaudampfschiff", 6, 5) dampf
Mid
kann auch Rechts von einem Gleichheitszeichen stehen. Dann wird
die ermittelte Teilzeichenkette durch die Zeichenfolge Rechts vom Gleichheitszeichen
ersetzt.
Sub ersetze() Dim Boot As String Boot = "Donaudampfschiff" Mid(Boot, 6, 5) = "segel" 'Neuer Wert: "Donausegelschiff" Debug.Print Boot End Sub
Replace(Expression As String, Find As String, Replace As String, [Start As Long = 1], [Count As Long = -1], [Compare As VbCompareMethod = vbBinaryCompare]) As String
Sucht in Expression
nach Find
und ersetzt es durch
Replace
. Mit Start
kann angegeben werden, ab der wievielten
Stelle in Expression
die auszugebende Zeichenkette beginnt.
Start
muss positiv sein. Mit Count
kann angegeben werden,
wie oft ersetzt werden soll, falls Find
mehr als einmal gefunden wird.
Hat Count
den Wert „-1“, werden alle Treffer ersetzt.
Mit dem Argument Compare
kann noch ein Wert aus der Aufzählung
VbCompareMethod
ausgewählt werden, um anzugeben, wie verglichen werden soll.
Debug.Print Replace("ABC ABC ABC Abc", "AB", "XY") XYC XYC XYC Abc Debug.Print Replace("ABC ABC ABC Abc", "AB", "XY", 2) BC XYC XYC Abc Debug.Print Replace("ABC ABC ABC Abc", "AB", "XY", ,1) XYC ABC ABC Abc Debug.Print Replace("ABC ABC ABC Abc", "AB", "XY", , ,vbTextCompare) XYC XYC XYC XYc
Right(String As Variant, Length As Long) As Variant
Gibt von String
den rechten Teil zurück, und zwar so viele Zeichen,
wie in Length
angegeben. Length
darf nicht negativ sein.
Debug.Print Right("Donaudampfschiff", 6) schiff
RTrim(String As Variant) As Variant
Sofern String
Leerzeichen am Ende hat, werden diese entfernt.
Der Rest des Strings wird zurückgegeben.
Debug.Print RTrim("ABC ") & "Z" ABCZ
Space(Number As Long) As Variant
Gibt eine Zeichenfolge zurück, die aus Number
Leerzeichen besteht.
Debug.Print Space(5) & "Z" Z
StrComp(String1 As Variant, String2 As Variant, [Compare As VbCompareMethod = vbBinaryCompare]) As Integer
Vergleicht String1
und String2
alphabetisch oder anhand
der Zuordnungstabelle (Abhängig von Compare
).
Liegt String1
vor String2
, wird „-1“ zurückgegeben,
liegt String1
nach String2
, wird „1“ zurückgegeben.
Sind sie gleich, wird „0“ zurückgegeben. Hat einer der beiden Strings den Wert
Null
, ist auch der Rückgabewert Null
.
StrConv(String As Variant, Conversion As VbStrConv, [LocaleID As Long]) As Variant
Wandelt String
anhand der Einstellungen von Conversion
um.
Einige der Einstellungen verursachen auf Systemen ohne Gebietseinstellungen für Japan oder Fernost einen Laufzeitfehler.
Debug.Print StrConv("aBc def", vbProperCase) Abc Def
String(Number As Long, Character As Variant) As Variant
Wenn Character
eine Zeichenfolge ist, wird dessen erstes Zeichen
so oft wiederholt, wie mit Number
angegeben. Ist Character
eine Zahl, wird sie als entsprechendes Zeichen der Zuordnungstabelle
interpretiert, bei Zahlen größer 255 oder kleiner 0 wird die Zahl
Modulo 256 berechnet.
Number
darf nicht negativ sein.
Debug.Print String(5, "A") AAAAA
StrReverse(Expression As String) As String
Kehrt einen String um.
Debug.Print StrReverse("Ehetum mit Ella nennen alle, Tim, Mutehe") ehetuM ,miT ,ella nennen allE tim mutehE
Trim(String As Variant) As Variant
Sofern String
Leerzeichen am Anfang oder Ende hat, werden diese
entfernt. Der Rest des Strings wird zurückgegeben.
Debug.Print RTrim(" ABC ") & "Z" ABCZ
UCase(String As Variant) As Variant
UCase
wandelt alle Kleinbuchstaben im Argument String
in Großbuchstaben um. Alle anderen Zeichen werden unverändert zurückgegeben.
Debug.Print UCase("17 Euro") 17 EURO