VBA 5stellige Postleitzahl in Excel-Spalte suchen und Text nachfolgend ausschneiden:kopieren
Hallo zusammen,
ich kann mir vorstellen, dass meine Anforderung schon öfter gelöst wurde, nur finde ich keine passende Lösung.
Ich bekomme aus einem Routenplaner die anzufahrenden Adressen als Export ausgegeben als Exceltabelle.
Die Adressen stehen als Text in der Spalte A und sind in der Reihenfolge Anschrift PLZ Ort, getrennt durch Leerzeichen.
Ein Musterbeispiel findet Ihr als Bild: Adressen aus Routenplaner.png
Zur Weiterverarbeitung benötige ich aber die Trennung in Anschrift sowie PLZ Ort in zwei nebeneinander liegenden Spalten.
Dies ist insofern komplex, weil der Text nicht einfach getrennt werden kann z.B. mit Text in Spalten oder Formeln, weil die Anschrift sowie der Ort unterschiedliche Längen und teilweise mit Bindestrichen versehen beinhalten.
Ich möchte also nach der 5-stelligen PLZ suchen, dann den gesamten Inhalt ab der ersten Stelle der PLZ nach rechts ausscheiden und in die leere Spalte B daneben kopieren, und dann soll das Leerzeichen hinter der Hausnummer der Adresse in Spalte A noch gelöscht werden, damit bei der Weiterverarbeitung keine Probleme damit entstehen.
Da ich den Text als Werte benötige möchte ich nicht mit Fromen in Zellen arbeiten sondern ein VBA-Projekt nutzen mit folgender Vorgehensweise:
BEGINN
WENN 5stellige Zahl gefunden
DANN gehe zu Beginn der 5stelligen Zahl
MARKIERE den Inhalt vom Beginn dieser Zahl bis zum Ende der Zeile
SCHNEIDE den markierten Inhalt komplett aus
KOPIERE den Inahalt in die Spalte B daneben
SPRINGE in die Spalte A zurück und lösche das letzte Leerzeichen hinter der Hausnummer
SPRINGE in die nächste Zeile der Spalte A
WIEDERHOLE diesen Vorgang, bis kein Inhalt mehr in den Zellen vorhanden ist
ENDE
Ich beziehe mich auf einen Beitrag den ich hier im Forum gefunden habe von Mitglied Biber vom 28.08.2006 um 20:26:43 Uhr.
VBA ist nachfolgend als Code beigefügt.
Diese Lösung ist schon fast das was ich suche.
Unterschied zu meinem Wunsch, das VBA kopiert den Text (wird nicht ausgeschnitten) in die Zeile darunter anstelle in die Spalte B daneben.
Es wäre toll wenn mit jemand da helfen könnte.
Beste Grüße aus Köln
ich kann mir vorstellen, dass meine Anforderung schon öfter gelöst wurde, nur finde ich keine passende Lösung.
Ich bekomme aus einem Routenplaner die anzufahrenden Adressen als Export ausgegeben als Exceltabelle.
Die Adressen stehen als Text in der Spalte A und sind in der Reihenfolge Anschrift PLZ Ort, getrennt durch Leerzeichen.
Ein Musterbeispiel findet Ihr als Bild: Adressen aus Routenplaner.png
Zur Weiterverarbeitung benötige ich aber die Trennung in Anschrift sowie PLZ Ort in zwei nebeneinander liegenden Spalten.
Dies ist insofern komplex, weil der Text nicht einfach getrennt werden kann z.B. mit Text in Spalten oder Formeln, weil die Anschrift sowie der Ort unterschiedliche Längen und teilweise mit Bindestrichen versehen beinhalten.
Ich möchte also nach der 5-stelligen PLZ suchen, dann den gesamten Inhalt ab der ersten Stelle der PLZ nach rechts ausscheiden und in die leere Spalte B daneben kopieren, und dann soll das Leerzeichen hinter der Hausnummer der Adresse in Spalte A noch gelöscht werden, damit bei der Weiterverarbeitung keine Probleme damit entstehen.
Da ich den Text als Werte benötige möchte ich nicht mit Fromen in Zellen arbeiten sondern ein VBA-Projekt nutzen mit folgender Vorgehensweise:
BEGINN
WENN 5stellige Zahl gefunden
DANN gehe zu Beginn der 5stelligen Zahl
MARKIERE den Inhalt vom Beginn dieser Zahl bis zum Ende der Zeile
SCHNEIDE den markierten Inhalt komplett aus
KOPIERE den Inahalt in die Spalte B daneben
SPRINGE in die Spalte A zurück und lösche das letzte Leerzeichen hinter der Hausnummer
SPRINGE in die nächste Zeile der Spalte A
WIEDERHOLE diesen Vorgang, bis kein Inhalt mehr in den Zellen vorhanden ist
ENDE
Ich beziehe mich auf einen Beitrag den ich hier im Forum gefunden habe von Mitglied Biber vom 28.08.2006 um 20:26:43 Uhr.
VBA ist nachfolgend als Code beigefügt.
Public Sub BiberTest()
Dim a As Long
Dim c, t As String
Dim atokens As Variant
Dim i As Integer
a = 1
While Tabelle1.Cells(a, 1) <> ""
c = Tabelle1.Cells(a, 1)
atokens = Split(Tabelle1.Cells(a, 1))
For i = 0 To UBound(atokens) - 1
t = atokens(i)
If (Len(t) = 5) And IsNumeric(t) Then
Tabelle1.Cells(a + 1, 1) = Mid(c, InStr(1, c, t))
Exit For
End If
Next
a = a + 2
Wend
End Sub
Diese Lösung ist schon fast das was ich suche.
Unterschied zu meinem Wunsch, das VBA kopiert den Text (wird nicht ausgeschnitten) in die Zeile darunter anstelle in die Spalte B daneben.
Es wäre toll wenn mit jemand da helfen könnte.
Beste Grüße aus Köln
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 2556215652
Url: https://administrator.de/contentid/2556215652
Ausgedruckt am: 22.11.2024 um 02:11 Uhr
6 Kommentare
Neuester Kommentar
Servus nach Kölle, und herzlich Willkommen auf Administrator.de!
Grüße Uwe
Sub SplitAddresses()
' Variables
Dim regex As Object, matches as Object, cell As Range
' regex object
Set regex = CreateObject("vbscript.regexp")
' regex object settings
regex.IgnoreCase = True
' regex pattern
regex.Pattern = "^(.*?)\s+(\d{5}.*)"
' Work on the current sheet
With ActiveSheet
' for each used cell in column A1:A(n)
For Each cell In .Range("A1:A" & .Cells(Rows.Count, "A").End(xlUp).Row)
' execute regex match
Set matches = regex.Execute(cell.Value)
' if match found ...
If matches.Count > 0 Then
' set matched values of cell and neighbor to regex submatches
cell.Value = Trim(matches(0).submatches(0))
cell.Offset(0, 1).Value = Trim(matches(0).submatches(1))
End If
Next
End With
End Sub