Teile aus Zelltext an unterschiedlicher Stelle auslesen möglich?
#1
Hallo zusammen,
ich habe einen großen Datensatz erhalten, der u.a. Adressen enthält. Diese sind allerdings innerhalb einer Zelle hinterlegt (Beispielstraße 5 12345 Beispielort). Ich möchte diesen Datensatz nach der PLZ sortieren. Da durch die unterschiedliche Länge der Straßennamen die PLZ stets an einer unterschiedlichen Stelle steht, komme ich mit der Funktion =Teil(A1;6;10) nicht weiter. Gibt es eine Funktion, die eine funfstellige Zahlenabfolge erkennt, die dann ausgelesen werden kann?

Über Hilfe bin ich sehr dankbar!
Top
#2
Hallo,

nur mit dem einen Beispielswert getestet:

=TEIL(A1;MAX(WENN(ISTZAHL(--TEIL(A1;SPALTE(1:1);1));SPALTE(1:1)))-4;5)

Die Formel muss mit Strg-Shift-Enter abgeschlossen werden.

Das ist eine Matrixformel - die Berechnung dürfte bei einem großen Datensatz vermutlich einige Zeit dauern. Wenn das eine einmalige Geschichte ist sollte das aber nicht unbedingt ein Problem sein.

Nach der Berechnung:

- den Bereich mit den Formeln markieren
- mit Strg-C in die Zwischenablage kopieren
- rechte Maus - Inhalte einfügen - Werte - Ok

Dadurch werden die Formeln im markierten Bereich in Werte umgewandelt.

Alternativ die folgende benutzerdefinierte Funktion die ich von 4 auf 5 geändert habe.

Code:
Function Zahl_5stellig(strText As String) As Variant
'sucht die erste Zahl mit 4 Ziffern in einem String
Dim lng As Long
Application.Volatile
Zahl_5stellig = ""
If strText Like "*#####*" Then 'es ist eine 4-stellige Zahl vorhanden
    For lng = 1 To Len(strText) - 4 ' jetzt Zeichenweise
        If Mid(strText, lng, 5) Like "#####" Then
            Zahl_5stellig = CInt(Mid(strText, lng, 5))
            Exit For
        End If
    Next lng
End If
End Function

Der Aufruf erfolgt mit =Zahl_5stellig(A1)

Auch diese Funktion wurde nur an dem einen Beispielssatz getestet.

Arbeitsblatt mit dem Namen 'Tabelle1'
 ABC
1Beispielstraße 5 12345 Beispielort1234512345

ZelleFormel
B1{=TEIL(A1;MAX(WENN(ISTZAHL(--TEIL(A1;SPALTE(1:1);1));SPALTE(1:1)))-4;5)}
C1=Zahl_5stellig(A1)
Achtung, Matrixformel enthalten!
Die geschweiften Klammern{} werden nicht eingegeben.
Verlassen Sie den Zelleneditor mit Strg+Shift + Enter, statt Enter alleine.
Diese Tabelle wurde mit Tab2Html (v2.4.1) erstellt. ©Gerd alias Bamberg
Gruß
Peter
Top
#3
Hallo,


guckst Du hier!

Angepasst auf Deine Version:


[html]
Arbeitsblatt mit dem Namen 'Tabelle1'
 ABCDE
1abcd 5 12345 dfsdag  1234512345
2abcd 12345 dfsdag  1234512345
3abcd 5 1234 dfsdag    

ZelleFormel
D1{=TEIL(LINKS(A1;MAX(ISTZAHL(TEIL(WECHSELN(A1;" ";"#");SPALTE(1:1);1)*1)*SPALTE(1:1)));VERGLEICH(1;ISTZAHL(TEIL(WECHSELN(A1;" ";"#")&0;SPALTE(1:1);5)*1)*1;0);LÄNGE(A1))}
E1{=WENNFEHLER(VERWEIS(9^9;1*TEIL(A1;MIN(WENN(ISTZAHL(1*TEIL(WECHSELN(A1;" ";"#");SPALTE(1:1);5));SPALTE(1:1)));SPALTE(1:1)));"")}
Achtung, Matrixformel enthalten!
Die geschweiften Klammern{} werden nicht eingegeben.
Verlassen Sie den Zelleneditor mit Strg+Shift + Enter, statt Enter alleine.
Diese Tabelle wurde mit Tab2Html (v2.4.1) erstellt. ©Gerd alias Bamberg
[/html]
Gruß

Edgar

Meine Antworten sind freiwillig und ohne Gewähr!
Über Rückmeldungen würde ich mich freuen.
Top
#4
Hallo,

es gibt so wenige Einsatzmöglichkeiten für RegEx, deshalb alternatv:


Code:
Function RegEx_PLZ(Tx As String)
Dim RegEx As Object

Set RegEx = CreateObject("vbscript.regexp")

RegEx.Pattern = "\s(\d{5})\s"
RegEx_PLZ = Trim(RegEx.Execute(Tx)(0))
End Function

mfg
Top
#5
Vielen lieben Dank für die schnellen Antworten. Ihr seid suuuper!
Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste