2016-08-17 1 views
1

Ich versuche, ein Makro in VBA zu schreiben, um eine Reihe von Adressen alle im selben Format in separaten Spalten zu teilen. Also eine Spalte mit einer Straßenanschrift, eine Vorstadt, eine Postleitzahl und eine Spalte mit einem Ländercode. Die Adressen alle folgen diesem Format:Trennen von Zeichenfolge in Spalten mit Excel VBA

123 Gefälschte Street, Suburbia QLD 4123

Ich wünschte, ich dies mit SQL nähern könnte, aber ich versuche, diese Funktion in einer Excel-Arbeitsmappe zu halten, wo Adressen von zentraler Bedeutung sein würden.

Mein geplanter Ansatz ist ein for-Schleife zu schreiben, die die Länge der Spalte D zählen (wo die Adressen gespeichert werden) ... so

For LngRow = 2 To Wksht.Range("D" & Wksht.Rows.Count).End(xlUp).Row 
     //concate/parse here// 
    Next 

und dann wäre es ein Standardverfahren der Arbeits rückwärts folgen, wo es würde trennen und die Postleitzahl (4 Ziffern) schreiben, dann den Staatscode (ein Array von Staatscodes), dann den Vorort (die Zeichenkette zwischen dem Staatscode und dem begrenzenden Komma nach der Straßenadresse) und schließlich die Straßenadresse, die ist was auch immer String ist, nachdem der Rest entfernt und neu geschrieben wurde.

Ich denke, rückwärts arbeiten ist am besten, da die Adresse ändert, während die letzten 3 Bits der Informationen Standard sind.

Ist es möglich, ein solches Makro in VBA zu schreiben? Vor allem, wie SQLish es scheint.

Antwort

0

Excel bietet bereits Funktionen, mit denen Sie erreichen können, was Sie wollen. Die einzige Voraussetzung ist, dass Sie die Daten auf der Disc speichern und sie aus einer vorhandenen Datei öffnen. Die Funktion heißt Workbooks.OpenText, aber beachte, dass sie exakt den angegebenen Parametern entspricht. Wenn du zum Beispiel das falsche Trennzeichen eingibst, kann es am Ende falsche Ergebnisse liefern oder wird die Datei nicht korrekt geöffnet.

Workbooks.OpenText "filename", _ 
DataType:=XlTextParsingType.xlDelimited, Origin:=XlPlatform.xlWindows, _ 
Space:=True, TextQualifier:=XlTextQualifier.xlTextQualifierNone 

Dies würde ein Leerzeichen getrennt Text oder CSV-Datei öffnen und die Werte in vielen Spalten setzen, ein Objekt Workbooks waren weitere Operationen entfalten können zurückkehren. Der andere Ansatz wäre, den Text Linewise zu lesen und den VBA String Split zu verwenden, um sie "manuell" in die entsprechenden Zeilen und Spalten einzugeben, was den Vorteil hat, dass Sie Daten manipulieren und nicht benötigte Zeichen entfernen können in die Datei im laufenden zu haben. Wenn du willst, könnte ich auch ein Beispiel dafür geben.

1

gehen durch Beschreibung in der Frage und unter der Annahme, dass das Adressformat gleich bleiben wird, ist hier ein Ansatz Split

Private Sub tt() 
    Dim strTest  As String 

    Dim arr1 
    Dim arr2 
    Dim arr3 

    Dim StreetAddress As String 
    Dim Postcode As String 
    Dim StateCode As String 
    Dim SubUrb As String 


    strTest = "123 Fake Street, Suburbia QLD 4123" 

    arr1 = Split(strTest, ",") 
    StreetAddress = arr1(0) 

    arr2 = Split(Trim(arr1(1)), Space(1)) 

    Postcode = arr2(2) 
    StateCode = arr2(1) 
    SubUrb = arr2(0) 

End Sub 
+0

Ich glaube, Sie ubound von arr2 für Postleitzahl und Staat Code nur für den Fall Vorort nehmen müssen ist zwei Worte – winghei

+0

wenn irgendein Teil seine Größe ändert, geht der ganze Code für einen Wurf. :) Es wird ein falsches Ergebnis geben. Das ist der Grund, warum die Anweisung ... "durch Beschreibung in der Frage geht und davon ausgeht, dass das Adressformat gleich bleibt" .... manchmal muss man sich absichern :) aber danke für den Kommentar. – cyboashu

Verwandte Themen