| 'String' bedeutet 'Zeichenkette'. Auf dieser Seite wird demonstriert, wie man mit Visual Basic Zeichen und Texte programmiert. | Besondee Beachtung findet die Anwendung als 'Benutzer-definierte' Hilfs-Funktionen, z.B. für Kalkulations-Programme. |
VBA
|
Visual Basic for Applications |
| String | Typ, Länge, Verkettung, Umwandlung, Array |
| Zeichen | ASCII- und Unicode-Zeichen, Codenummer |
| Suchen | Suchen und Ersetzen von Strings und Zeichen |
| Teile | Teil-Strings von links, aus der Mitte, von rechts |
| Groß & Klein | Umwandlung von Groß- und Kleinbuchstaben |
| Wiederholung | Strings fixer Länge durch Auffüllen mit wiederholten Zeichen |
| Split() & Join() | Aufspaltung von Text in Array-Elemente |
| Ziffern-Strings | Rechnen mit beliebiger Genauigkeit und beliebig großen Zahlen |
| Verwandte Themen | Zeichensätze, Unicode, Zeichen und Strings in verscheidenen IT-Bereichen und Programmiersprachen |
Der Daten-Typ String |
|
TypFür Zeichen und Zeichen-Ketten (Strings) bietet VBA den Typ StringIn der vereinfachten Version kann man die Deklaration weglassen, das ist jedoch nicht empfehlenswert ! • Verwenden sie am Anfang jedes VBA-Moduls die Anweisung Option Explicit, mit welcher die saubere Deklaration aller Variablen erzwungen wird. |
Deklaration der Variablen s und t
als String:
Option Explicit
Dim s, t As String
|
LängeDie Angabe der Länge erfolgt in Zeichen, nicht in Byte. Auch ↓ Unicode-Zeichen werden als 1 Zeichen gezählt. |
Länge eines Strings:
s = "ab" & ChrW(&H20AC);
' ergibt s=ab€
k = Len(s)
' ergibt k=3
|
VerkettungStrings und Zeichen werden durch den Operator & miteinander verkettet (aneinander gehängt). Der gleiche Operator wird auch in Kalkulations-Programmen (LibreOffice, OpenOffice, MS-Excel) verwendet, in VBA muss jedoch vor und nach dem Operator je 1 Leerzeichen stehen. |
Verkettung von 2 Strings und 1 Zeichen:
s = "Visual"
t = " Basi" z = s & t & Chr(99) ' ergibt z="Visual Basic"
|
UmwandlungDie Umwandlung beliebiger Variablen-Typen in Strings erfolgt automatisch, wenn man sie an eine String-Variable zuweist, oder wenn man sie mit dem Operator & verkettet (abgeschaltete Zeile).• Besser ist es jedoch, Daten oder Variable mit der Funktion CStr ausdrücklich in Strings umzuwandeln: Das ist verlässlich, sicher und im Programm besser erkennbar. |
Umwandlung Zahl → String
i = 12
's = "Seite " & i
s = "Seite " & CStr(i)
'ergibt s="Seite 12"
|
ArrayWie mit jedem anderen Variablen-Typ kann man auch ein Array von Strings deklarieren und verwenden.♦ Details zu VBA-Arrays |
Verwendung von String-Arrays
Dim s, dow(7) As String
dow(1) = "Mo" dow(2) = "Di" s = dow(2) ' ergibt s="Di"
|
VergleichVBA arbeitet korrekt und berücksichtigt den Unterschied zwischen Groß- und Kleinbuchstaben.=WENN("A"="a";"gleich";"ungleich")
LibreOffice und OpenOffice arbeiten korrekt, MS-Excel ignoriert den Unterschied.Die VBA-Funktion rechts kann auch in MS-Excel zwischen Groß- und Klein-Buchstaben unterscheiden: =WENN(pst_strings_equal("A";"a");"gleich";"ungleich")
• Das gilt auch für ↓ Unicode-Zeichen: Bei Umlauten, griechischen Buchstaben, usw. ignoriert Excel den Unterschied zwischen großen und kleinen Zeichen, OpenOffice und VBA arbeiten korrekt. |
Function pst_strings_equal( _
Optional text1 As String = "", _
Dim iseq As Boolean
Optional text2 As String = "") _ As Boolean
iseq = False
End Function
If text1 = text2 Then iseq = True
pst_strings_equal = iseq
|
ASCII- und Unicode-Zeichen |
|
|
Zeichen wie z.B. das 'A' werden intern als Bitmuster (bestehend aus 8
oder mehr Bits) gespeichert. Nur aus dem Zusammenhang (!) ergibt sich, ob ein derartiges Muster als Zahl, Zeichen, Farbe, Ton, ... interpretiert werden soll. |
Die wichtigsten
(→
ASCII)-Zeichen werden genauso gespeichert wie die ganzen
DezimalZahlen 0..255 Ein → Zeichencode ist ein Standard, in dem festgelegt wird, mit welchen ganzen Zahlen (CodeNummern) die einzelnen Zeichen gespeichert werden. ♦ Details zum Thema Zeichen-Codes |
Umwandlung CodeNummer → ZeichenVBA bietet die Funktion Chr zur Umwandlung von CodeNummern (0..255) in Zeichen. Diese Funktion entspricht der Funktion =ZEICHEN von Kalkulations-Programmen.● Die Anwendung ist jedoch nur für die → ASCII-CodeNummern (0..127) sicher. Verwenden sie für alle anderen Zeichen nur die ↓ Unicode-Funktion ChrW |
Umwandlung der CodeNummer 65 in das ASCII-Zeichen 'A'
s = Chr(65)
' ergibt s="A"
|
Umwandlung UniCodeNummer → ZeichenVBA bietet schon seit langer Zeit die Funktion ChrW für die wichtigsten → Unicode-Zeichen (CodeNummern 0..65535). In den gleichen Excel-Versionen fehlt allerdings meist die entsprechende Kalkulations-Funktion UNIZEICHEN• Die Funktion des gezeigten Beispiels ersetzt diese Funktion, d.h. man kann sie in MS-Excel als 'Benutzerdefinierte Funktion' verwenden. • In OpenOffice ist das nicht notwendig, da dort die Standard-Funktion UNIZEICHEN geboten wird. |
Beispiel: Diese Funktion gibt ein (ASCII- oder) Unicode-Zeichen zurück.
Function pst_unicode_chr(unicodenr As Long) As String
Anwendung in MS-Excel:
If (unicodenr < 0) Then unicodenr = 0
End Function
pst_unicode_chr = ChrW(unicodenr) =pst_unicode_chr(8721)
ergibt das Summen-Zeichen Σ (Sigma)
|
Umwandlung Zeichen → CodeNummerVBA bietet die Funktion Asc zur Umwandlung eines Zeichens in die entsprechende CodeNummer (0..255).• Das ist nur für den → ASCII-Code (CodeNummern 0..127) zuverlässig und eindeutig, ansonsten vom jeweils verwendeten nationalen Zeichencode abhängig ! Verwenden sie für alle anderen Zeichen nur die ↓ Unicode-Funktion AscW |
Umwandlung der CodeNummer 65 in das ASCII-Zeichen 'A'
i = Asc("A")
' ergibt i=65
|
Umwandlung Unicode-Zeichen → CodeNummerVBA bietet die Funktion AscW zur Umwandlung von → Unicode-Zeichen in die entsprechenden CodeNummern 0..65535• Die von AscW zurückgegebenen Zahlen werden für CodeNummern >32767 als negative Zahlen interpretiert; dieses unerwünschte Verhalten wird durch die Funktion korrigiert. • Die Funktion des Beispiels ersetzt die Standard-Funktion UNICODE in allen Excel-Versionen, welche diese nicht anbieten. • In OpenOffice ist das nicht notwendig, da dort die Standard-Funktion UNICODE geboten wird. |
Beispiel: Diese Funktion gibt die (ASCII- oder) Unicode-CodeNummer zurück.
Function pst_unicode_asc(zeichen As String) As Long
Anwendung in MS-Excel:
Dim uc As Long
uc = AscW(zeichen)
End Function
If uc < 0 Then uc = uc& + &H10000 pst_unicode_asc = uc& =pst_unicode_asc("Σ")
ergibt die DezimalZahl 8721 |
Non-StandardBei allen Produkten des IT-Marktführers muss man besonders auf den → Code-Bereich U+80..U+9F (dezimal 128..159) achten. Dieser Bereich enthält in allen Standard Zeichensätzen nicht druckbare Steuerzeichen, in jenen von Microsoft jedoch einige bunt zusammengewürfelte Zeichen aus unterschiedlichen Bereichen.Die meisten dieser Zeichen haben kaum Bedeutung, das €-Zeichen kommt jedoch oft vor: Es wird von M$-Programmen meist mit CodeNummer=0x80 (dezimal 128) codiert und nicht mit der Standard CodeNummer=0x20AC (dezimal 8364) |
Function euro_corr(text As String) As String
euro_corr = Replace(text, Chr(&H80), ChrW(&H20AC))
End Function
|
Suchen und Ersetzen |
|
SucheFunktion InStr() sucht nach der ersten gefundenen Position eines Musters und gibt diese als ganze Zahl zurück. Die Zeichen-Position wird ab 1 gezählt.Argumente: Start-Position (optional, hier nicht verwendet), durchsuchter Text (Haystack), gesuchtes Muster (Needle). Bei leerem String oder erfolgloser Suche ist das Ergebnis 0 |
s = "ABCabc"
p = InStr(s, "a") ' ergibt p=4
|
ErsetzenVBA kennt leider keine → Regulären Ausdrücke, daher braucht man viele andere Funktionen, z.B. Replace(Text, gesuchtes_Muster, Ersatz_Text)
Das Beispiel ersetzt in einem Text das nur im deutschen Sprachraum übliche
Dezimal-Komma durch den intenational verwendeten Dezimal-Punkt. |
s = "123,456"
t = Replace(s, ",", ".") ' ergibt s="123.456"
|
Groß- und Klein-Buchstaben |
|
GroßbuchstabenFunktion UCase wandelt einen Text in große Buchstaben um. |
s = "abcXYZ"
g = UCase(s) ' ergibt g="ABCXYZ"
|
KleinbuchstabenFunktion LCase wandelt einen Text in kleine Buchstaben um. |
s = "abcXYZ"
k = LCase(s) ' ergibt k="abcxyz"
|
|
●
Beide Funktionen arbeiten ebenso wie die Funktionen
=GROSS, =KLEIN von Kalkulations-Programmen nicht nur im
→
ASCII-Bereich (CodeNummern 32..127), sondern auch mit
→ Unicode-Zeichen (128..65535). Umlaute, griechische Buchstaben, etc. werden so umgewandelt wie erwartet. |
Umwandlung von griechischen Buchstaben:
s = ChrW(948)
' ergibt s=δ
t = UCase(s)
' ergibt s=Δ
|