Normalerweise speichert man Straße und Hausnummer in einem Feld. Was aber, wenn man ausnahmsweise doch einmal die Angaben getrennt benötigt? Zunächst sollte man sich fragen, ob man nicht grundsätzlich gegen die erste Normalform verstoßen hat.
Die Funktionen HsNr() und StrName() geben die
Hausnummer bzw. den Straßennamen zurück. Sie kommen mit der Mannheimer Bezeichnung
'L 10 9' genauso klar wie mit 'Aachener Str. 1a-c' oder
'Gartenstraße 1 1/2'. Je nachdem, was die Anwendung leisten soll und wie
(un)einheitlich die Ausgangsdaten sind, gibt es aber auch andere Lösungen dieses
Problems. So sind die so erzeugten Teilstrings z.B. nur bedingt als
Sortierkriterium geeignet.
Function HsNr(strStrasse As String) As String
Dim i As Integer
Dim intLaenge As Integer, x As String * 1
Dim strErgebnis As String
Dim blnBruch As Boolean
intLaenge = Len(strStrasse)
For i = intLaenge To 1 Step -1 'Gehe von rechts nach links durch Strasse
x = Mid$(strStrasse, i, 1) 'aktuell zu prüfendes Zeichen
Select Case x
Case "/"
blnBruch = True
Case " " 'Leerzeichen gefunden?
If blnBruch Then ' wurde in der Hausnr zuvor ein Bruchstrich gefunden?
blnBruch = False
Else ' wenn nicht, hier enden
strErgebnis = Right$(strStrasse, intLaenge - i)
Exit For
End If
End Select
Next
HsNr = strErgebnis
End Function
Function StrName(strStrasse As String) As String
Dim i As Integer
Dim intLaenge As Integer, x As String * 1
Dim strErgebnis As String
Dim blnBruch As Boolean
intLaenge = Len(strStrasse)
For i = intLaenge To 1 Step -1
x = Mid$(strStrasse, i, 1)
If x = "/" Then
blnBruch = True
End If
If x = " " Then
If blnBruch Then
blnBruch = False
Else
strErgebnis = Left$(strStrasse, i - 1)
Exit For
End If
End If
Next
If Len(strErgebnis) Then
StrName = strErgebnis
Else
StrName = strStrasse
End If
End Function