Feldinhalte aufteilen, Teil I

Lies diesen Artikel und viele weitere mit einem kostenlosen, einwöchigen Testzugang.

Wenn sie Daten etwa aus Excel-Tabellen oder anderen Quellen importieren, liegen diese nicht immer in der gewünschten Form vor. Dann sind Felder wie Vorname und Nachname in einem Feld zusammengefasst, oder Sie möchten vielleicht Straße und Hausnummer trennen und auf zwei Felder aufteilen. Wie das mit möglichst wenig manuellem Aufwand gelingt, zeigen wir in diesem Artikel am Beispiel von Straße und Hausnummer.

Beispieldatenbank

Die Beispiele dieses Artikels finden Sie in der Datenbank 1905_FeldinhalteAufteilen.accdb.

Wo und wie aufteilen

Bevor wir uns überhaupt an eine Tabelle heranwagen, die Daten zum Aufteilen enthält, machen wir uns mit dem Handwerkzeug vertraut, das wir dazu benötigen – und das heißt in diesem Fall Zeichenkettenfunktionen. Schauen wir uns zunächst ein einfaches Beispiel an – eine Straße mit einer Hausnummer, wobei beide Informationen durch ein Leerzeichen getrennt sind:

Gerichtsstr. 27

Das ist ein einfacher Fall: Wir brauchen nur das Leerzeichen in der Zeichenkette zu suchen und den Teil davor als Straße und den dahinter als Hausnummer zu speichern.

Das erledigen wir mit folgendem Codeschnippsel (siehe Prozedur StrasseUndHausnummer_1). Wir deklarieren eine Variable für den Ausgangsausdruck sowie für die resultierenden Elemente:

Dim strStrasseUndHausnummer As String
Dim strStrasse As String
Dim strHausnummer As String

Dann legen wir den Startausdruck fest:

strStrasseUndHausnummer = "Gerichtsstr. 27"

Die Strasse ermitteln wir, indem wir das erste Auftreten eines Leerzeichens suchen und den Teil bis zu diese Leerzeichen extrahieren:

strStrasse = Left(strStrasseUndHausnummer,              InStr(1, strStrasseUndHausnummer, " ") - 1)

Bei der Hausnummer sieht es ähnlich aus, nur dass wir mit der Mid-Funktion hier den Teil nach dem Leerzeichen ermitteln:

strHausnummer = Mid(strStrasseUndHausnummer, InStr(1,                       strStrasseUndHausnummer, " ") + 1)

Danach geben wir beides aus:

Debug.Print "*" & strStrasse & "*"
Debug.Print "*" & strHausnummer & "*"

Die Sternchen geben wir hier aus, um sicherzustellen, dass das Leerzeichen nicht in einer der beiden Zeichenketten enthalten ist. Wir erhalten:

*Gerichtsstr.*
*27*

Das war der erste, naive Ansatz. Dieser funktioniert schon nicht mehr, wenn wir diese Straße untersuchen:

Borkhofer Str. 17

Hier erhalten wir dann:

*Borkhofer*
*Str. 17*

Hier haben wir schon ein Leerzeichen im Straßennamen. Wir müssen also nicht das erste, sondern das letzte Leerzeichen ermitteln. Dem werden wir in der nächsten Version gerecht (siehe Prozedur StrasseUndHausnummer_2). Hier speichern wir die Position des letzten Leerzeichens auch direkt in einer Variablen:

Dim intLetztesLeerzeichen As Integer
strStrasseUndHausnummer = "Borkhofer Str. 17"
intLetztesLeerzeichen = InStrRev(                           strStrasseUndHausnummer, " ")

Damit ermitteln wir dann wie zuvor die beiden Teile des Strings:

Ende des frei verfügbaren Teil. Wenn Du mehr lesen möchtest, hole Dir ...

Testzugang

eine Woche kostenlosen Zugriff auf diesen und mehr als 1.000 weitere Artikel

diesen und alle anderen Artikel mit dem Jahresabo

Schreibe einen Kommentar