2016-08-17 43 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