使用Excel VBA将字符串分隔为列

时间:2016-08-17 08:20:48

标签: excel vba excel-vba macros

我正在尝试在VBA中编写一个宏,将所有相同格式的地址分成不同的列。所以街道地址列,郊区,邮政编码和州代码列。地址都遵循以下格式:

123 Fake Street,Suburbia 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中编写这样的宏?特别是考虑到它似乎是如何。

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

Excel已经提供了可以实现您想要的功能。唯一的要求是将数据保存到光盘并从现有文件中打开它。该函数被称为Workbooks.OpenText,但要注意它确实坚持给定的参数,如果你给出错误的分隔符,例如它最终可能会给你错误的结果或者不会正确分割文件。

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

这将打开一个Space分隔的Text或CSV文件,并将值放入多个列中,返回一个Workbooks对象,进一步的操作可以展开。

另一种方法是读取文本线条并使用VBA字符串拆分“手动”在相应的行和列中输入它们,这样做的好处是可以操作数据并去掉你不想要的字符有动态进入文件。如果你想,我也可以举一个例子。