Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

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!
Antworten 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
Antworten 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.
Antworten 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
Antworten Top
#5
Vielen lieben Dank für die schnellen Antworten. Ihr seid suuuper!
Antworten Top


Gehe zu:


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