Live-Forum - Die aktuellen Beiträge
Datum
Titel
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
1300to1304
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Adressen trennen

Adressen trennen
23.02.2013 09:21:51
Lutz
Guten Morgen
ich möchte gesendete Adressen einzeln umformatieren, d.h. sinvoll trennen.
Aus meinem E-Mailprogramm kopiert sehen sie so aus, wie in meinem Beispiel in A1 oder A8.
https://www.herber.de/bbs/user/84021.xls
Für eine Weiterverarbeitung soll es am Schluß aussehen, wie in A3 bzw. A10.
Mit der Funktion "Text in Spalten" funktioniert es zwar für die einzelne Adresse, aber ein aufgezeichneter Makro läßt sich nicht für die Nächste anwenden, weil die Zeichenzahl nicht übereinstimmt. Kann mir evt. jemand mit einer VBA-Lösung weiterhelfen?
Die Straße steht immer als Großbuchstabe ohne Leerzeichen gleich hinter dem Namen. Die PLZ sind immer die letzten 5 Zahlen in der Zeilen. Bis dahin geht also die Straße mit Hausnummer. Das sind die Trennungsargumente die ich so sehe.
Robert LehmannWolfhartstraße 450739 KölnDeutschland
Heinz SchulzeKörte Enden 1526624 SüdbrookmerlandDeutschland
Es trifft nur für deutsche Adressen zu.
Für eure Hilfe wäre ich dankbar.
Gruß
Lutz

9
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
regex
23.02.2013 10:35:02
ransi
Hallo Lutz
Tabelle1

 AB
1Robert LehmannWolfhartstraße 450739 KölnDeutschlandRobert Lehmann_Wolfhartstraße 4_50739_ Köln_Deutschland
2Heinz SchulzeKörte Enden 1526624 SüdbrookmerlandDeutschlandHeinz Schulze_Körte Enden 15_26624_ Südbrookmerland_Deutschland

Formeln der Tabelle
ZelleFormel
B1=machs(A1)
B2=machs(A2)


Excel Tabellen im Web darstellen >> Excel Jeanie HTML 4
Wenn die Daten immer so aufgebaut sind kann ich dir einen Code anbieten der die Daten so aufbereitet:
Diesen Code in ein Modul:
' **********************************************************************
' Modul: Modul1 Typ: Allgemeines Modul
' **********************************************************************

Option Explicit

Public Function machs(zelle)
    Dim regex As Object
    Dim strTmp As String
    Dim M As Object
    strTmp = zelle.Text
    Set regex = CreateObject("VbScript.Regexp")
    With regex
        .Global = True
        .Pattern = "Deutschland$"
        strTmp = .Replace(strTmp, "_Deutschland")
        .Pattern = "\d{5}(?= )"
        Set M = .Execute(strTmp)
        strTmp = .Replace(strTmp, "_" & M(0) & "_")
        .Pattern = "[a-zäöüß](?=[A-ZÄÖÜ])"
        Set M = .Execute(strTmp)
        strTmp = .Replace(strTmp, M(0) & "_")
    End With
    machs = strTmp
End Function


Ist zwar etwas holprig, aber da könntest du jetzt mit Daten-Text in Spalten weitermachen.!?!?
ransi

Anzeige
AW: regex
23.02.2013 11:33:10
JoWE
Hallo Ransi, hallo Lutz
sorry dass ich mich hier einmische :-)
super Lösung Ransi-
bei den Regulären Ausdrücken zur Lösung der Aufgabe war ich ja gedanklich recht schnell, nur das richtige "pattern" hab' ich nicht hinbekommen. Kannst Du Deine Pattern bitte mal mal kommentieren?
Gruß
Jochen

regex
23.02.2013 13:42:49
ransi
HAllo JoWE
Ich kratz bei regulären Ausdrücken auch erst an der Oberfläche...
.Pattern = "Deutschland$" -->"Deutschland" am Schluss .Pattern = "\d{5}(?= )"-->5 Zahlen vor einem Leerzeichen .Pattern = "[a-zäöüß](?=[A-ZÄÖÜ])"-->ein kleinbuchstabe vor einem GROSSBUCHSTABEN ransi

Anzeige
AW: thx ot
23.02.2013 14:22:33
JoWE

Alternative
23.02.2013 12:08:31
CitizenX
Hi,
Code kommt in ein allgemeines Modul:
Option Explicit
Sub splitMe()
Dim Regex As Object: Set Regex = CreateObject("vbscript.regexp")
Dim oMatch, Zelle, i
With Regex
.Global = True
.Pattern = "(\w+\s+\w+)([A-Z][a-zäüöß]+(?:\s+[A-Z][a-zäüöß]+)?\s+\d+)(\d{5})\s+([A-za-zä _
üöß]+)([A-Z][a-zäüöß]+)"
For Each Zelle In Selection
If .Test(Zelle) Then
Set oMatch = .Execute(Zelle)(0).submatches
For i = 0 To oMatch.Count - 1
Zelle.Offset(, i + 1).Value = oMatch(i)
Next
End If
Next
End With
End Sub
Bereich der Adressen auswählen,Makro starten.
Grüße
Steffen

Anzeige
AW: Alternative
24.02.2013 07:49:18
Lutz
Hallo Ransi, hallo Steffen,
beides funktioniert wunderbar. Da draus läßt sich der Rest machen.
Danke
Gruß Lutz

AW: Alternative
24.02.2013 14:53:27
Lutz
Hallo Steffen,
Nun hab ich doch noch eine Frage:
Zelle.Offset(, i + 1).Value = oMatch(i)
Die + 1 ... regelt, ab welcher Zelle das Splitten rechts daneben beginnt. Wie kann ich die Vertikale einstellen?
Wie sieht es aus, wenn das Splitting generell von z.B. F1 beginnen soll?
Gruß
Lutz

AW: Alternative
25.02.2013 04:17:11
CitizenX
Moin,
Zelle.Offset(+Zeile,+Spalte)
cells(Zelle.Row,6)= oMatch(i)
..und wenn du den Bereich nicht unbedingt Selektieren willst sondern Vordefinieren dann so:

Option Explicit
Sub splitMe()
Dim Regex As Object: Set Regex = CreateObject("vbscript.regexp")
Dim oMatch, lngLast&, i&, n&
Const spWerte = 1   ' Spalte der Orginal Texte -hier Spalte A (Index=1)
Const zeStart = 1   ' Erste Zeile der Orginal Texte
Const spAusgabe = 6 ' Spalte der Ausgabe  -hier Spalte F (Index=6)
lngLast = Cells(Rows.Count, spWerte).End(xlUp).Row
With Regex
.Global = True
.Pattern = "(\w+\s+\w+)([A-Z][a-zäüöß]+(?:\s+[A-Z][a-zäüöß]+)?\s+\d+)(\d{5})\s+([A-za-zä _
üöß]+)([A-Z][a-zäüöß]+)"
For i = zeStart To lngLast
If Len(Trim$(Cells(i, spWerte))) Then
If .Test(Cells(i, spWerte)) Then
Set oMatch = .Execute(Cells(i, spWerte))(0).submatches
For n = 0 To oMatch.Count - 1
Cells(i, spAusgabe + n) = oMatch(n)
Next
End If
End If
Next
End With
End Sub
Grüße
Steffen

Anzeige
AW: Alternative
26.02.2013 15:05:55
Lutz
Hallo Steffen,
danke. Nun hat sich mit der Zeit herausgestellt, dass die Adressenargumente doch nicht immer übereinstimmen. Bei z.B. "Str." wird wegen dem Punkt nichts angezeigt(Jennifer SchneiderVon-Jhering-Str. 1326632 Ihlow). Da ich nicht weiß, wie ich das Pattern entsprechend schreiben muss, muss ich da wieder fragen...
Gruß
Lutz

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige