chrislm
Goto Top

Über eine Abfrage Adresse Glätten

Hallo.
Ich benutze folgende Funktion in Excel um zwischen Straße und Hausnummer ein Leerzeichen zu bekommen:
=GLÄTTEN(LINKS(E2;MIN(WENN(ISTZAHL(--TEIL(E2;SPALTE(2:2);1));SPALTE(2:2)))-1) & " " & RECHTS(E2;LÄNGE(E2)-MIN(WENN(ISTZAHL(--TEIL(E2;SPALTE(2:2);1));SPALTE(2:2)))+1))
Das klappt auch sehr gut aber gibt es eine Möglichkeit die Formel als Abfrage in Access zu integrieren?

Content-ID: 207056

Url: https://administrator.de/contentid/207056

Ausgedruckt am: 25.11.2024 um 15:11 Uhr

colinardo
colinardo 27.05.2013 um 12:39:06 Uhr
Goto Top
Hallo chrislm,
Was meinst du mit Abfrage ?

Grüße Uwe
chrislm
chrislm 27.05.2013 um 13:01:29 Uhr
Goto Top
Ich dachte so an eine Aktualisierungsabfrage
colinardo
colinardo 27.05.2013 um 13:35:51 Uhr
Goto Top
d.h. du verwendest eine Abfrage um Daten aus einer anderen Quelle in Excel
zu importieren in der die Strasse und Hausnummer nicht so formatiert sind wie du es willst ?
Dann mach die Abfragetabelle doch in ein extra Blatt und erstelle Referenzen auf die Zellen in einem anderen wo du dann die geünschte Änderung der Straße und Hausnummer vornimmst.
chrislm
chrislm 27.05.2013 um 13:43:21 Uhr
Goto Top
Ich importiere eine Exceldatei in die Accessdatenbank. Vorher prüfe ich halt in Excel die Straße und Hausnummer ober mit der Formel. Ich dachte das könne man auch einfach mit Access eine Abfrage erstellen die nach dem Import die Tabelle überprüft
colinardo
colinardo 27.05.2013 um 14:06:52 Uhr
Goto Top
Das könntest du mit einem Makro in Access erledigen, wie sehen denn die Rohdaten aus ?
chrislm
chrislm 27.05.2013 um 14:33:23 Uhr
Goto Top
Ist eine normale Tabelle mit
Anrede, Vorname, Name, Straße, PLZ und Ort
Nur das die Straßen halt blöd erfasst wurden, oft fehlt das Leerzeichen. Wie würde denn das Macro aussehen, hast du da ein Beispiel?
colinardo
colinardo 27.05.2013 aktualisiert um 15:06:52 Uhr
Goto Top
In Zeile 2 und 3 noch den Namen deiner Tabelle und den Spaltennamen in der die Straße drin steht eintragen, und auf die Tabelle loslassen
Sub processTable()
    tableName = "Tabelle1"  
    Spaltenname = "Straße"  
    Dim db As Database
    Dim rs As Recordset
    Set db = Application.CurrentDb
    Set rs = db.OpenRecordset(tableName, dbOpenTable)
    rs.MoveFirst
    Do While not rs.EOF
        strRaw = rs(Spaltenname).Value
        Set myRegExp = CreateObject("vbscript.regexp")  
        myRegExp.IgnoreCase = True
        myRegExp.Pattern = "([^\d]*)\s*(\d+[a-z]*)"  
        Set myMatches = myRegExp.Execute(Trim(strRaw))
        If myMatches.Count >= 1 Then
            Set myMatch = myMatches(0)
            If myMatch.SubMatches.Count >= 1 Then
                strFinal = Trim(myMatch.SubMatches(0)) & " " & myMatch.SubMatches(1)  
            End If
        End If
        rs.Edit
        rs(Spaltenname).Value = strFinal
        rs.Update
        rs.MoveNext
    Loop
 rs.Close
End Sub

Grüße Uwe
Biber
Biber 27.05.2013, aktualisiert am 25.06.2013 um 21:09:55 Uhr
Goto Top
Moin chrislm,

unabhängig von der handwerlichem Umsetzbarkeit ist es ganz, ganz äh-bäh, aus einem Quellsystem (hier: Excel) Daten zu importieren und beim Import Inhaltlich zu manipulieren. Die Anforderung miss immer an den Datenlieferanten gehen.

Wenn du die Strasse/Nr-Daten nur ohne Leerzeichen bekommen kannst, dann IST ES HALT SO RICHTIG.


Ich kann dir ohne viel Nachzudenken 37 Fälle konstrien, dan denen deine Excel/colinardos regEx-Manipulationen richtig in die Grütze fassem:
"Strasse des 17.Juni 37"
"Platz des 1.Mai 3"
"Kirchstr.33b-d
"In der Mietskaserne 145 4.Etage li"
"Hauptstr. 12 (bei 123consult 3x klingeln)"
"3-Schanzen-Allee 12"
...

...und das sind nur die Beispiele, die mir sogar an einem ver###ten Montach einfallen.

Wenn Strasse/Nr ein ungeprüftes Prosa-Feld ist, das kannst du es nicht in einen halb Text/halb Numerisch-Teil trennen und ästhetisch formatiert wieder zusammenlöten.

Was machst du denn z.B., wenn du im Access Strasse/Nr als Text(50) vorgehen hast, als Importfeld auch ein Text un Länge 50 kommt (also gerade so gültige Länge) und du da ein Leerzeichen reinpressen willst??? Dann crasht dein Import mit 8000 Datensätzensätzen, weil der Datenlieferant einen Datensatz dabei hatte mit einem Feld in zulässiger Länge, aber ohne leerzeichen zwischen Strasse und Nr.?

Ich halte das für eine suboptimale Idee

Grüße
Biber
chrislm
chrislm 27.05.2013 aktualisiert um 15:42:10 Uhr
Goto Top
Das funktioniert klasse, vielen dank!
Ich mache ein Import über ein VBS Modul und rufe danach über Call das Script auf. Falls da was kaputt geht, bedarf es etwas Handarbeit. Aber so habe ich mehr repariert als kaputt gemacht. Denn die Adressen werden noch einmal abgeglichen bei einem externen Dienstleister und der braucht zwingend ein Leerzeichen zwischen Straße und Hausnummer.

Dennoch danke an alle die sich mit der Problematik auseinandersetzten.