2016-08-17 73 views
1

我試圖在VBA中編寫一個宏,將一堆地址全部以相同的格式分成不同的列。所以街道地址欄,郊區,郵政編碼和州代碼欄。該地址的所有格式如下:使用Excel將字符串分隔爲列VBA

123僞造街,郊區QLD 4123

我希望我能接近這個使用SQL,但我想保持這個功能的Excel工作簿,其中地址是中央內部。

我的計劃方法是編寫一個for循環,其對列d(其中地址存儲)的長度......所以

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

,然後它會跟着向後那裏工作的標準程序它會分隔和寫入郵政編碼(4位數字),然後是州代碼(州代碼數組),然後是郊區(州代碼和街道地址後面的分隔逗號之間的字符串),最後是街道地址是什麼字符串剩下的其餘部分已被刪除和重寫。

由於街道地址發生變化,而最後3位信息是標準的,所以我認爲反向工作最好。

是否可以在VBA中編寫這樣的宏?特別是考慮到SQLJ看起來如何。

回答

0

Excel已經提供了可以實現你想要的功能。唯一的要求是將數據保存到光盤並從現有文件中打開它。該函數被稱爲Workbooks.OpenText,但請注意,它完全堅持給定的參數,例如,如果給出錯誤的分隔符,例如它可能會給您錯誤的結果,或者不會正確地打開文件分割。

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

這將打開一個空間分隔的文本或CSV文件,並將值到多列,返回一個工作簿對象是進一步的操作可以展開。

另一種方法是讀取文本Linewise並使用VBA String Split將其手動輸入到相應的行和列中,這樣做的好處是您可以操作數據並去除不想要的字符隨時進入文件。如果你想我也可以舉一個例子。

1

的問題會通過描述和假設地址格式將保持不變,這裏是用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

我認爲你需要採取ARR2的UBOUND的郵政編碼和國家代碼,以防萬一郊區一個方法是兩個詞 – winghei

+0

如果有任何部分改變其大小,整個代碼去折騰。 :)它會給出不正確的結果。這就是爲什麼該statment ..'在問題中的描述,並假設地址格式將保持相同'....有時需要對衝:)但感謝評論。 – cyboashu