Home > Artikel > Ausgabe 11/2011 > Zeichenketten-Funktionen

Zeichenketten-Funktionen

Achtung: Sie sind nicht angemeldet. Wenn Sie Abonnent sind und sich anmelden, lesen Sie den kompletten Artikel, laden das PDF herunter oder probieren die Beispieldatenbank aus (sofern vorhanden).

Die Arbeit mit Zeichenketten ist ein elementarer Bestandteil beim Umgang mit Access. Dies reicht vom einfachen Zusammensetzen einzelner Texte zu einer Zeichenkette über das Ermitteln bestimmter Textelemente bis hin zur buchstabenweisen Analyse von Texten. VBA bietet dazu einige Funktionen, die dieser Artikel vorstellt – neben den grundlegenden Techniken unter VBA und an anderen Orten wie Eigenschaften, Abfragen und Steuerelementen.

Beispieldatenbank

Die Beispiele dieses Artikels finden Sie in der Datenbank 1111_Zeichenkettenfunktionen.mdb.

Einsatzzwecke

Die nachfolgend vorgestellten Zeichenkettenfunktionen können Sie wie die anderen bereits vorgestellten Access/VBA-Funktionen in manchen Tabelleneigenschaften, als Werte oder Kriterien in Abfragen oder als Eigenschaften oder Feldinhalte in Formularen, Berichten und Steuerelementen einsetzen. Darüberhinaus treten die nachfolgend vorgestellten Funktionen natürlich in VBA-Routinen in Erscheinung.

Zeichenketten

Zeichenketten kommen entweder als Literal oder beispielsweise als Wert einer Variablen, eines Feldes oder einer Eigenschaft vor. Folgendes könnte eine Zeichenkette liefern:

  • "André": Literal
  • "": Leere Zeichenkette
  • strVorname: String-Variable
  • Me!txtVorname.Value: Wert eines Textfeldes
  • rst!Vorname: Wert eines Feldes eines Recordsets

Während beim Literal, bei einer leeren Zeichenkette und bei einer gefüllten String-Variable keine Gefahr droht, können ein Steuerelement oder ein Feld durchaus den Wert Null enthalten. Dies ist im Gegensatz zur leeren Zeichenkette eigentlich keine Zeichenkette. Wenn Sie im Rahmen des Umgangs mit Zeichenketten auf einen Null-Wert stoßen, müssen Sie damit auf besondere Weise umgehen. Sie können beispielsweise mit einer leeren oder auch mit einer bestimmten anderen Zeichenkette weiterarbeiten, wenn Sie auf den Null-Wert treffen. Manchmal ist der Nullwert auch nützlich, mehr dazu später. Die einfachste Zeichenkettenfunktion ist das Verketten zweier Zeichenketten mit dem Kaufmanns-Und-Operator (&). Bild 1 und Bild 2 zeigen, wie Sie ein Literal und den Wert einer VBA-Funktion für die Eigenschaft Steuerelementinhalt eines Textfeldes eines Formulars (oder wahlweise eines Berichts) eingeben und anzeigen.

Zusammensetzen eines Literals und einer VBA-Funktion

Bild 1: Zusammensetzen eines Literals und einer VBA-Funktion

Anzeige einer zusammengesetzten Zeichenkette

Bild 2: Anzeige einer zusammengesetzten Zeichenkette

Statt in die Eigenschaft Steuerelementinhalt können Sie den Ausdruck in der Entwurfsansicht des Formulars auch gleich in das Textfeld eingeben. In der Formularansicht wird der Ausdruck dann ausgewertet und angezeigt.

Damit Sie gleich sehen, dass dies auch per VBA funktioniert, legen Sie gleich darunter ein weiteres Textfeld namens txtZeichenketteVBA an und erstellen die folgende Ereignisprozedur, die durch das Ereignis Beim Laden des Formulars ausgelöst wird (Eigenschaft Beim Laden auf [Ereignisprozedur] einstellen, auf die Schaltfläche mit den drei Punkten klicken und die nun im VBA-Editor erscheinende Prozedur erweitern):

Private Sub Form_Load()

     Me!txtZeichenketteVBA = "Duisburg, den " & Date

End Sub

Die Prozedur bewirkt das Gleiche wie das Füllen der Eigenschaft Steuerelementinhalt: Es trägt einen Text wie Duisburg, den 3.12.2011 in das Textfeld ein.

Der wichtigste Unterschied zwischen dem Einsatz als Eigenschaft und unter VBA ist, dass Sie bei einer Eigenschaft die deutsche Version der VBA-Funktionen verwenden (manchmal können Sie auch die englische Variante eingeben, diese wird dann übersetzt).

Damit Sie die folgenden Beispiele jeweils schnell ausprobieren können, formulieren wir diese in VBA – Sie geben diese dann testweise in das Direktfenster des VBA-Editors ein (Strg + C) und führen diese durch Betätigen der Eingabetaste aus.

& und +

Gerade eben haben Sie den &-Operator kennengelernt, mit dem Sie zwei Zeichenketten verknüpfen können:

Debug.Print "a" & "b"

ab

Dies gelingt auch mit dem +-Operator:

Debug.Print "a" + "b"

ab

Der wesentliche Unterschied liegt in der Behandlung von Null-Werten. Wenn einer der zu verknüpfenden Ausdrücke den Wert Null hat, behandelt der &-Operator diesen als leere Zeichenkette:

Debug.Print "a" & Null

a

Bei Verwendung des +-Operator wird jedoch der komplette Ausdruck zu Null, wenn einer der Teilausdrücke den Wert Null aufweist:

Debug.Print "a" + Null

Null

Länge von Zeichenketten ermitteln

Die Länge einer Zeichenkette ermitteln Sie mit der Len-Funktion. Sie erwartet lediglich die Zeichenkette als Parameter, die Sie als Literal oder in Form einer Variablen beziehungsweise eines Ausdrucks übergeben können. Beispiel:

Debug.Print Len("abc")

3

In Ausdrücken verwenden Sie die deutsche Version, also beispielsweise =Länge([txtZeichenkette]) (siehe Beispielformular frmZeichenkettenfunktionen).

Teile von Zeichenketten ermitteln

Mit den drei Funktionen Left, Right und Mid können Sie Teilzeichenketten einer Zeichenkette ermitteln:

  • Left: Liefert die ersten n Zeichen einer Zeichenkette zurück. Der Aufruf Left("abc",2) liefert also beispielsweise die Zeichenkette ab zurück (die ersten beiden Zeichen des Ausdrucks abc).
  • Mid: Liefert eine Teilzeichenkette einer Zeichenkette zurück, die nach einer bestimmten Anzahl Zeichen beginnt und eine festgelegte Länge hat. Der Aufruf Mid("abc",2,1) liefert also beispielsweise die Teilzeichenkette zurück, die mit dem zweiten Zeichen beginnt und ein Zeichen lang ist – also das Zeichen c.
  • Right: Liefert die letzten n Zeichen einer Zeichenkette zurück. Der Aufruf Right("abc",2) liefert also beispielsweise die Zeichenkette bc zurück (also die hinteren beiden Zeichen des Ausdrucks abc).

Die verwandten Funktionen Left$, Mid$ und Right$ funktioniert ähnlich, liefert aber keinen Variant-, sondern einen String-Ausdruck zurück. Dies äußert sich vor allem in der Behandlung von Null-Werten: Während die ...$-Varianten bei Übergabe eines Null-Wertes einen Fehler auslösen, sind Left, Mid und Right hier toleranter. Die Namen der Funktionen für Ausdrücke in Eigenschaften, Steuerelementinhalten et cetera lauten Links, Rechts und Teil. Beispiele für den Einsatz in Textfeldern finden Sie im Formular frmZeichenkettenfunktionen (siehe Bild 3).

Beispiele für Zeichenkettenfunktionen in Textfeldern

Bild 3: Beispiele für Zeichenkettenfunktionen in Textfeldern

Zeichen ersetzen

Gerade beim Umgang mit Daten möchten Sie vielleicht gelegentlich Zeichen ersetzen – etwa um in einem Adressbestand Varianten wie Koeln in Köln umzuwandeln. Hier hilft die Replace-Funktion (zu deutsch: Ersetzen) weiter. Sie erwartet als Parameter die zu untersuchende Zeichenkette, die zu ersetzende Zeichenkette sowie die ersetzende Zeichenkette. Im Direktfenster testen Sie diesen Befehl beispielsweise so:

Debug.Print Replace("Koeln", "oe", "ö")

Köln

Die Funktion durchsucht die Originalzeichenkette nach Vorkommen von oe und ersetzt diese durch ö. Wenn Sie in den Adressen einer Tabelle alle Vorkommen von Koeln durch Köln ersetzen möchten, verwenden Sie natürlich nicht oe und ö als zweiten und dritten Parameter – so würde nämlich aus Moers und Voerde die Orte Mörs und Vörde. Das würde kein gutes Bild beim nächsten Anschreiben abgeben ...

Teilzeichenketten finden

Die beiden Funktionen InStr und InStrRev suchen nach einer Teilzeichenkette innerhalb einer Zeichenkette und liefern die Position der gefundenen Teilzeichenkette innerhalb der durchsuchten Zeichenkette zurück. Wenn die gesuchte Teilzeichenfolge nicht gefunden wird, liefern beide Funktionen den Wert 0. Der Unterschied beider Funktionen ist erstens, dass InStr die Suche vorn beginnt und InStrRev hinten. Außerdem unterscheiden sich die Parameter ein wenig. InStr verwendet die folgenden Parameter:

  • Position, ab der gesucht werden soll
  • Zu durchsuchende Zeichenkette
  • Gesuchte Zeichenkette

Ein Beispielaufruf im Direktfenster sieht so aus:

Debug.Print InStr(1,"abcde","c")

3

InStrRev erwartet die Parameter in anderer Reihenfolge:

  • Zu durchsuchende Zeichenkette
  • Gesuchte Zeichenkette
  • Startposition (optional)

Debug.Print InStrRev("abcde","c")

3

Beide Funktionen haben zusätzlich den optionalen Parameter Compare, der die Vergleichsmethode festlegt.

Alle Vorkommen der gesuchten Zeichenkette innerhalb einer Zeichenkette finden Sie mithilfe der Do While-Schleife. Hier geschieht Folgendes:

  • Der zu durchsuchende und der Suchbegriff werden festgelegt.
  • Die erste Fundstelle wird mit der InStr-Funktion ermittelt und in intStart gespeichert.
  • Wurde ein Vorkommen entdeckt, wird die Do While-Schleife mindestens einmal durchlaufen und die Position der Fundstelle wird ausgegeben.
  • Danach wird die Suche erneut durchgeführt und die Fundstelle ausgegeben – bis InStr den Wert 0 liefert, also keine Fundstelle mehr vorliegt.

Public Sub AlleFinden()

     Dim strOriginal As String

     Dim strSuchbegriff As String

     Dim intStart As String

     strOriginal = "abcdeabcdeabcde"

     strSuchbegriff = "c"

     intStart = InStr(1, strOriginal, _

         strSuchbegriff)

     Do While Not intStart = 0

         Debug.Print "Fundstelle: " & intStart

         intStart = InStr(intStart + 1, _

Sie haben das Ende des frei verfügbaren Teil dieses Artikels erreicht!

Wenn Sie mehr lesen und auf viele weitere Artikel zugreifen möchten, melden Sie sich als Abonnent unter Login an. Falls nicht, bestellen Sie doch einfach ein Jahresabonnement!