EXCEL - 将澳大利亚地址拆分为多个列

时间:2015-06-30 06:31:38

标签: excel excel-vba vba

我的地址格式如下:

67 Sydney Road 
Coburg 
Vic 3058

有没有办法将此地址拆分为excel本身的4列,例如:

Address Line 1 : 67 Sydney Road
City: Coburg
State: VIC
Postcode: 3058

我的所有地址都以类似的方式格式化。在地址线和城市以及城市和州之间实际上有一个回车。

由于

3 个答案:

答案 0 :(得分:1)

我建议使用正则表达式执行此任务。但首先,一个更简单的方法:

您可以使用Split(text_string, delimiter)方法分隔各个部分。 首先,您可以在回车符处拆分,然后您可以在空白处拆分以分离数据本身。

但是如果你有“不洁”数据,有多个空格或其他问题,这种方法有一个很大的缺点。如果您有多个whitepsace,则必须使用Trim()来摆脱它们。

为了安全并且能够解析“更复杂”的案例,我建议使用正则表达式。学习起来比较复杂,但是你有更多的解析文本的可能性。一个很大的优势是您可以对结果进行分组,这样您就可以使用“街道”或“城市”等群组名称。这比Array [0]更容易阅读。

答案 1 :(得分:1)

或者你也可以编写一个返回数组的矩阵函数。连续选择四个单元格,输入公式

=addr(<cell-reference>)

并使用<shift><cntrl><return>提交。矩阵函数将在一行中的四个单独的列中返回输入字段的四行,然后您可以根据您的要求进行处理。

函数addr()可能是这样的

Function addr(v)
Dim i%, a
a = split(v, Chr(10))  ' option base 0 is in effect ...
ReDim out(1 To 1, 1 To UBound(a) + 1)
For i = 0 To UBound(a)
 out(1, i + 1) = a(i)  ' matrix functions need to return a 2D array
Next i
addr = out             ' this puts the separated values into your table
End Function

function addr in VB macro editor

答案 2 :(得分:0)

如果您完全确定地址的格式将保持不变,那么这应该可以解决您的问题 -

Sub splitAddress()
    Dim WrdArray() As String
    Dim WrdArray2() As String
    Dim text_string, temp, strg As String
    text_string = "67 Sydney Road\nCoburg\nVic 3058"
    WrdArray() = Split(text_string, "\n")
    temp = Split(text_string, "\n")(2)
    WrdArray2() = Split(temp, " ")
    ReDim Preserve WrdArray(1)
    ReDim Preserve WrdArray(3)
    WrdArray(2) = WrdArray2(0)
    WrdArray(3) = WrdArray2(1)
    strg = "Address Line 1 : " & WrdArray(0) & vbNewLine & "City: " & WrdArray(1) & vbNewLine & "State: " & WrdArray(2) & vbNewLine & "Postcode: " & WrdArray(3)
    MsgBox strg
End Sub