Anzeige
Archiv - Navigation
848to852
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
848to852
848to852
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Name & Adresse in Zelle: nur Strasse löschen

Name & Adresse in Zelle: nur Strasse löschen
23.02.2007 17:01:00
Gregor
Hallo Profis!
In Spalte B (1:1000) steht in jeder Zelle Texte der folgenden Art (mal mit, mal ohne Komma getrennt):
- Hans Muster AG, Bahnhofstr. 43, München
- XPC AG Ackerstr. 516 Düsseldorf
Gibt es eine Möglichkeit, die Strasse inkl. Nummer aus der Zelle zu löschen?
Danke jetzt schon für deinen Input!!
Grüsse
Gregor

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

Betreff
Datum
Anwender
Anzeige
An irgendwas muss man sich orientieren...
23.02.2007 17:19:18
{Boris}
Hi Gregor,
...können - das ist bei jeder Stringzerlegung so.
Und in Deinem Fall dürfte es wirklich kaum machbar sein.
Selbst wenn man sich beispielsweise an der Hausnummer orientiert (die die erste vorkommene ZAHL in dem String ist), dann weiß man immer noch nicht, aus wievielen Wörtern der Straßenname besteht, denn so was wie "In der Donk" oder "Erfurter Str." sind schon wieder mehr als ein Wort - man bekommt also die Leerzeichen nicht gepackt.
Oder gibt es eine weitestgehend eindeutige Regel?
Grüße Boris
AW: An irgendwas muss man sich orientieren...
23.02.2007 17:32:53
Gregor
Hallo Boris; merci für den Input.
Ja, die Strasse lautet immer auf "str." (Strasse zuvor auf Str. ersetzt); Wege oder "in der Donk" sind unsichtig, können unbeachtet bleiben.
Zusatzfrage:
suchen und finden mit " ? " findet eine Postleitzahl, aber auch Wörter der Art : " UNIQE ".
Wenn man mit suchen/finden/ersetzen mit Variblen arbeiten möchte, wäre es demnach schön, wenn
man wie im Word nur Zahlen suchen könnte? Gibt es so was im Excel?
Grüsse und Merci für den Einsatz
Gregor
Anzeige
AW: An irgendwas muss man sich orientieren...
23.02.2007 17:33:49
Gregor
Sorry, Frage ist noch offen!
AW: An irgendwas muss man sich orientieren...
23.02.2007 21:12:41
Uwe
Du könntest z.B. die boolsche (true/false) Rückgabe von IsNumeric(String) überprüfen...
AW: Name & Adresse in Zelle: nur Strasse löschen
23.02.2007 22:05:12
Peter
Hallo Gregor,
mein Makro erschlägt mit Sicherheit nicht alle Fälle, aber einen großen Teil deiner Adressen kann man sicherlich damit separieren.


Option Explicit
Public Sub Separieren()
Dim lZeile   As Long
Dim aTmp     As Variant
Dim iIndex   As Integer
Dim iPosit   As Integer
   For lZeile = 1 To Range("B65536").End(xlUp).Row
      Range("B" & lZeile).Value = Replace(Range("B" & lZeile).Value, "Strasse", "Str.")
      Range("B" & lZeile).Value = Replace(Range("B" & lZeile).Value, "strasse", "str.")
      Range("B" & lZeile).Value = Replace(Range("B" & lZeile).Value, "Straße", "Str.")
      Range("B" & lZeile).Value = Replace(Range("B" & lZeile).Value, "straße", "str.")
      aTmp = Split(Range("B" & lZeile).Value, " ")
      Range("C" & lZeile & ":E" & lZeile).ClearContents
      For iIndex = 0 To UBound(aTmp)
         iPosit = InStr(LCase(aTmp(iIndex)), "str.")
         If iPosit = 0 Then
            Range("C" & lZeile).Value = Range("C" & lZeile) & " " & aTmp(iIndex)
          Else
            Range("D" & lZeile).Value = Range("D" & lZeile).Value & " " & aTmp(iIndex)
            If IsNumeric(Left(aTmp(iIndex + 1), 1)) Then
               Range("D" & lZeile).Value = _
                  Range("D" & lZeile).Value & " " & aTmp(iIndex + 1)
               Range("E" & lZeile).Value = _
                  Range("E" & lZeile).Value & " " & aTmp(iIndex + 2)
               Exit For
            End If
         End If
      Next iIndex
      Range("C" & lZeile).Value = Trim(Range("C" & lZeile).Value)
      Range("D" & lZeile).Value = Trim(Range("D" & lZeile).Value)
      Range("E" & lZeile).Value = Trim(Range("E" & lZeile).Value)
   Next lZeile
End Sub 


Gruß Peter
Anzeige
AW: Name & Adresse in Zelle: nur Strasse löschen
24.02.2007 08:30:00
Peter
Hallo Gregor,
eine verbesserte Version:


Public Sub Separieren()
Dim lZeile   As Long
Dim aTmp     As Variant
Dim iIndex   As Integer
Dim sTyp     As String
   For lZeile = 1 To Range("B65536").End(xlUp).Row
      Range("B" & lZeile).Value = Replace(Range("B" & lZeile).Value, "Strasse", "Str.")
      Range("B" & lZeile).Value = Replace(Range("B" & lZeile).Value, "strasse", "str.")
      Range("B" & lZeile).Value = Replace(Range("B" & lZeile).Value, "Straße", "Str.")
      Range("B" & lZeile).Value = Replace(Range("B" & lZeile).Value, "straße", "str.")
      Range("B" & lZeile).Value = Replace(Range("B" & lZeile).Value, "Str ", "Str. ")
      Range("B" & lZeile).Value = Replace(Range("B" & lZeile).Value, "str ", "str. ")
      aTmp = Split(Range("B" & lZeile).Value, " ")
      Range("C" & lZeile & ":E" & lZeile).ClearContents
      For iIndex = 0 To UBound(aTmp)
         If InStr(LCase(aTmp(iIndex)), "str.") > 0 Then
            If Len(aTmp(iIndex)) < 5 Then ' Straßen-Name getrennt ?
               aTmp(iIndex - 1) = aTmp(iIndex - 1) & " " & aTmp(iIndex)
               aTmp(iIndex) = ""
               Exit For
            End If
         End If
      Next iIndex
      sTyp = "Name"
      For iIndex = 0 To UBound(aTmp)
         If aTmp(iIndex) <> "" Then
            If InStr(LCase(aTmp(iIndex)), "str.") > 0 Then
               sTyp = "Str"
            End If
            If sTyp = "Str" Then
               If aTmp(iIndex) = _
                  Right(Range("B" & lZeile).Value, Len(aTmp(iIndex))) Then ' Ortsname
                  sTyp = "Ort"
               End If
            End If
            Select Case sTyp
               Case "Name"
                  Range("C" & lZeile).Value = _
                     Range("C" & lZeile) & " " & aTmp(iIndex)
               Case "Str"
                  Range("D" & lZeile).Value = _
                     Range("D" & lZeile).Value & " " & aTmp(iIndex)
               Case "Ort"
                  Range("E" & lZeile).Value = _
                     Range("E" & lZeile).Value & " " & aTmp(iIndex)
            End Select
         End If
      Next iIndex
      Range("C" & lZeile).Value = Trim(Range("C" & lZeile).Value)
      Range("D" & lZeile).Value = Trim(Range("D" & lZeile).Value)
      Range("E" & lZeile).Value = Trim(Range("E" & lZeile).Value)
   Next lZeile
End Sub 


Gruß Peter
Anzeige
AW: Name & Adresse in Zelle: nur Strasse löschen
24.02.2007 14:57:00
Peter
Hallo Gregor,
nun ist es halbwegs perfekt - zumindest für alle Straßen-Namen die den Teil Str., str. Straße, straße, Strasse, strasse, Str , str , enthalten.
Was ich in deinem beiden Musteradressen vermisse ist die Postleitzahl. Gibt es die nicht?
Das Makro löscht die Straßen-Namen nicht, sondern separiert Name, Straße, Ort in die drei benachbarten Zellen C, D, E aus denen du die benötigten Teile holen kannst.


'
'   In Spalte B (1:1000) steht in jeder Zelle Texte der folgenden Art
'   (mal mit, mal ohne Komma getrennt):
'
'   - Hans Muster AG, Bahnhofstr. 43, München
'   - XPC AG Ackerstr. 516 Düsseldorf
'
'   Gibt es eine Möglichkeit die Straße inkl. Hausnummer aus der Zelle zu löschen?
'
'   Das nachfolgende Makro löscht die Straßennamen nicht, sondern separiert
'   die Adressteile - Name, Straße, Ort - in drei Zellen (C, D, E), aus denen die
'   gewünschten Teile wieder zusammengefügt bzw. weggelassen werden können.
'
Public Sub Separieren()
Dim lZeile     As Long     ' For/Next Zeilen-Index
Dim aTmp       As Variant  ' Array zur Split-Aufnahme des Textes
Dim iIndex     As Integer  ' Index zum Array
Dim sTyp       As String   ' Typ der Adresse - Name, Straße, Ort
Dim sOrt       As String   ' Kennzeichen Ort = Postlz oder letzter Ortsname
Dim bGefunden  As Boolean  ' Schalter für Postlz gefunden False/True
'
'    es werden die Adressen abgearbeitet
'    dabei werden zuerst alle Straßen-Namen, die in irgendeiner Form auf Straße
'    enden zur späteren Identifikation in Str. oder str. geändert.
'
   For lZeile = 1 To Range("B65536").End(xlUp).Row
      Range("B" & lZeile).Value = Replace(Range("B" & lZeile).Value, "Strasse", "Str.")
      Range("B" & lZeile).Value = Replace(Range("B" & lZeile).Value, "strasse", "str.")
      Range("B" & lZeile).Value = Replace(Range("B" & lZeile).Value, "Straße", "Str.")
      Range("B" & lZeile).Value = Replace(Range("B" & lZeile).Value, "straße", "str.")
      Range("B" & lZeile).Value = Replace(Range("B" & lZeile).Value, "Str ", "Str. ")
      Range("B" & lZeile).Value = Replace(Range("B" & lZeile).Value, "str ", "str. ")
'       den Eingabebereich in ein Array aufsplitten
      aTmp = Split(Range("B" & lZeile).Value, " ")
'       die Ausgabezellen löschen
      Range("C" & lZeile & ":E" & lZeile).ClearContents
'       eine evtl. vorhandene Postleitzahl (5-stellig, numerisch) suchen oder
'       die linksbündig numerische Hausnummer und dann den nachfolgenden Namen
      bGefunden = False
      For iIndex = UBound(aTmp) To 0 Step -1
         If Len(aTmp(iIndex)) = 5 And _
            IsNumeric(aTmp(iIndex)) Then ' ein 5-stelliger, numerisch ?
            bGefunden = True
            Exit For
         ElseIf IsNumeric(Left(aTmp(iIndex), 1)) Then ' Hausnummer gefunden ?
            iIndex = iIndex + 1
            bGefunden = True
            Exit For
         End If
      Next iIndex
'       wenn eine Postlz vorlag, diese, sonst den letzen Ortsnamen speichern
'       um mit diesem Wert den Beginn des Ortes zu identifizieren
      If bGefunden = True Then
         sOrt = aTmp(iIndex)
       Else
         sOrt = aTmp(UBound(aTmp))
      End If
'       getrennte Straßen-Namen (z. B. Hamburger Straße) im Array in eine
'       Array-Zelle zusammenfassen, die leer werdende Zelle löschen
      For iIndex = 0 To UBound(aTmp)
         If InStr(LCase(aTmp(iIndex)), "str.") > 0 Then
            If Len(aTmp(iIndex)) < 5 And _
               iIndex > 2 Then ' Straßen-Name getrennt ?
               aTmp(iIndex - 1) = aTmp(iIndex - 1) & " " & aTmp(iIndex)
               aTmp(iIndex) = ""
               Exit For
            End If
         End If
      Next iIndex
      sTyp = "Name"  ' erster Adress-Typ ist der Name
'
'       den Array abarbeiten und je nach Typ in eine andere Zelle im
'       Tabellenblatt aufteilen bzw. zusammenfassen
'
      For iIndex = 0 To UBound(aTmp)
         If aTmp(iIndex) <> "" Then                        ' Array-Zelle gefüllt ?
            If InStr(LCase(aTmp(iIndex)), "str.") > 0 Then ' Str. gefunden ?
               sTyp = "Str"      ' Typ auf Straße setzen
            End If
            If sTyp = "Str" Then ' nur von Typ Str => Typ Ort
               If aTmp(iIndex) = sOrt Then  ' Postlz bzw. Ortsname gefunden ?
                  sTyp = "Ort"   ' Typ auf Ort
               End If
            End If
            Select Case sTyp     ' Array-Zellen gemäß Typ in die Zellen speichern
               Case "Name"
                  Range("C" & lZeile).Value = _
                     Range("C" & lZeile) & " " & aTmp(iIndex)
               Case "Str"
                  Range("D" & lZeile).Value = _
                     Range("D" & lZeile).Value & " " & aTmp(iIndex)
               Case "Ort"
                  Range("E" & lZeile).Value = _
                     Range("E" & lZeile).Value & " " & aTmp(iIndex)
            End Select
         End If
      Next iIndex
'       die Zellen ohne führende/nachfolgende Leerstellen speichern
'       evtl. vorhandene Semikolon und/oder Kommata entfernen
      Range("C" & lZeile).Value = Trim(Range("C" & lZeile).Value)
      Range("C" & lZeile).Value = Replace(Range("C" & lZeile), ";", "")
      Range("C" & lZeile).Value = Replace(Range("C" & lZeile), ",", "")
      Range("D" & lZeile).Value = Trim(Range("D" & lZeile).Value)
      Range("D" & lZeile).Value = Replace(Range("D" & lZeile), ";", "")
      Range("D" & lZeile).Value = Replace(Range("D" & lZeile), ",", "")
      Range("E" & lZeile).Value = Trim(Range("E" & lZeile).Value)
      Range("E" & lZeile).Value = Replace(Range("E" & lZeile), ";", "")
      Range("E" & lZeile).Value = Replace(Range("E" & lZeile), ",", "")
   Next lZeile
End Sub 


Gruß Peter
Anzeige
AW: Name & Adresse in Zelle: nur Strasse löschen
24.02.2007 16:03:40
Daniel
Hallo
probier mal diese Methode.
ich habs als Funktion geschrieben, dann kann man es auch in Excel verwenden:
Hier das kleine Makro
Sub Strassennamen_raus()
Dim Zelle As Range
For Each Zelle In Range("B1:B1000")
Zelle.Value = StrasseLöschen(Zelle.Value)
Next
End Sub

und hier die Funktion:
Public
Function StrasseLöschen(Addr As String) As String
Dim Text As String, Text2 As String
Dim i As Long, pt1 As Long, pt2 As Long
Text = Addr
Text = WorksheetFunction.Substitute(Text, "Strasse", "|")
Text = WorksheetFunction.Substitute(Text, "strasse", "|")
Text = WorksheetFunction.Substitute(Text, "Strase", "|")
Text = WorksheetFunction.Substitute(Text, "strase", "|")
Text = WorksheetFunction.Substitute(Text, "Straße", "|")
Text = WorksheetFunction.Substitute(Text, "straße", "|")
Text = WorksheetFunction.Substitute(Text, "Str ", "|")
Text = WorksheetFunction.Substitute(Text, "str ", "|")
Text = WorksheetFunction.Substitute(Text, "Str.", "|")
Text = WorksheetFunction.Substitute(Text, "str.", "|")
Text = WorksheetFunction.Substitute(Text, "Allee", "|")
Text = WorksheetFunction.Substitute(Text, "allee", "|")
Text = WorksheetFunction.Substitute(Text, "Gasse", "|")
Text = WorksheetFunction.Substitute(Text, "gasse", "|")
Text = WorksheetFunction.Substitute(Text, "Weg", "|")
Text = WorksheetFunction.Substitute(Text, "weg ", "|")
For i = 1 To 3 'falls doppelte Leerzeichen vorkommen
Text = WorksheetFunction.Substitute(Text, " |", "|")
Text = WorksheetFunction.Substitute(Text, "| ", "|")
Text = WorksheetFunction.Substitute(Text, "|.", "|")
Next
pt1 = InStr(Text, "|")
'Kein Strassennamen vorhanden
If pt1 = 0 Then
StrasseLöschen = Addr
Exit Function
End If
'Hausnummer löschen
If IsNumeric(Mid(Text, pt1 + 1, 1)) Then
pt2 = InStr(pt1, Text, " ")
Text2 = Mid(Text, pt2)
Text = Left(Text, pt1)
End If
'Strassennamen löschen.
pt1 = InStrRev(Text, " ")
pt2 = InStrRev(Text, Chr(10))
If pt1 > pt2 Then pt2 = pt1
Text = Left(Text, pt2)
StrasseLöschen = Text & Text2
End Function

Gruß, Daniel
Anzeige
AW: Name & Adresse in Zelle: nur Strasse löschen
25.02.2007 07:46:00
Gregor
Hallo Boris, Uwe, Peter und Daniel
Merci für eure Beiträge.
Das Problem ist gelöst.
Schönen Sonntag noch!
Grüsse Gregor

300 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige