EXCEL – 将澳大利亚地址分成多列

我有以下格式的地址:

67 Sydney Road Coburg Vic 3058 

有没有办法,我把这个地址分成4列在Excel本身,如:

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

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

谢谢

或者,您也可以编写一个返回数组的matrix函数。 在一行中select四个单元格,input公式

 =addr(<cell-reference>) 

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

函数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 

函数地址在VB宏编辑器中

我会build议使用正则expression式来完成这个任务。 但首先,一个更简单的方法:

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

但是,如果您的数据“不清洁”,有多个空白或其他问题,则此方法有一个很大的缺点。 当你有一个以上的白色皮肤时,你将不得不使用Trim()来摆脱它们。

为了安全和能够parsing“更复杂”的情况,我build议使用正则expression式。 学习起来比较复杂,但是你有更多的parsing文本的可能性。 一个很大的好处就是你可以对结果进行分组,所以你可以使用“街道”或“城市”这样的组名。 这比Array [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