艾伦(Allan)拥有数百个名称和地址的列表。街道地址范围为Main Street,Main Street 123,US RT 2或South Elm St187。他想从地址中区分街道编号。

因此,地址123 Main Street在一个单元格中以“ 123”结尾,在另一个单元格中以“ Main Street”结尾。如果没有街道号,则街道号列中没有任何内容。 “文本到列”工具将不起作用,他想知道如何才能做到这一点。

在理想的情况下,Excel可以让您轻松地将数字与街道名称分开。由于此选项不存在,因此您有两种选择。最耗时的选择涉及添加额外的列并重新键入数据。但是,如果您想节省时间,则可以使用各种公式来完成任务。

假定地址列表在A列中(从A1单元格开始),则可以使用类似于以下的公式来提取地址的数字部分:

=IF(ISERROR(VALUE(LEFT(A1,1))),"",LEFT(A1,FIND(" ",A1)-1))

假设您将公式放在单元格B1中,则可以使用其他公式来得出地址的非数字部分:

=TRIM(RIGHT(A1,LEN(A1)-LEN(B1)))

注意,这种方法确实有局限性。有些地址,尤其是在主要大城市地区,使用的格式为152-33 BellBlvd。上面的公式将适用于这些地址,但是,如果使用备用地址152 33 Bell Blvd.,则该公式将无法正确解析。除非您想购买专业开发的地址解析程序,否则上面的公式和对结果的快速眼动扫描就足够了。

在这种情况下,另一个公式起作用。假设您的地址在单元格A2中,则在单元格B2中输入以下公式:

=IF(ISNUMBER(VALUE(LEFT(A2,1))),VALUE(LEFT(A2,FIND(" ",A2)-1)),"")

该公式的意思是:“如果第一个字符不是数字,则将单元格留空。否则,请将剩下的所有字符都留给我,但不包括第一个空格。”然后,您可以使用该公式的结果来提取地址的非数字部分:

=IF(B2="",A2,MID(A2,FIND(" ",A2)+1,99))

另一种方法是使用数组公式。再次在这里,假设您的地址在单元格A2中,则可以使用以下命令:

=IF(ISNUMBER(1*MID(A2,ROW($1:$1),1)) = TRUE, LEFT(A2,FIND(" ",A2,1)),"")

由于这是一个数组公式,因此需要使用Ctrl + Shift + Enter进行输入。结果是该公式返回地址的前导数字部分。然后,可以使用以下数组公式确定非数字部分:

=IF(ISNUMBER(1*MID(A2,ROW($1:$1),1)) = TRUE, RIGHT(A2,LEN(A2)-FIND(" ",A2,1)),A2)

最后,下面的宏可用于从街道名称中分出街道地址。

Sub GetStreetNum()

Dim sStreet As String     Dim J As Integer     Dim iNum As Integer

For Each cell In Selection         sStreet = cell.Value         J = InStr(sStreet, " ")

If J > 0 Then             iNum = Val(Left(sStreet, J))

If iNum > 0 Then                 cell.Offset(0, 1).Value = iNum                 sStreet = Trim(Mid(sStreet, J, Len(sStreet)))

End If         End If         cell.Offset(0, 2).Value = sStreet     Next End Sub

要使用此宏,只需选择包含您的地址的单元格范围,然后运行它。地址的前导数字部分将出现在每个地址右侧的单元格中,而地址的余额将放置在该地址右侧的单元格中。 (因此,请确保您选择的地址右边有两个空白列。)

注意:

如果您想知道如何使用此页面(或_ExcelTips_网站上的任何其他页面)中描述的宏,我准备了一个特殊页面,其中包含有用的信息。

_ExcelTips_是您进行经济高效的Microsoft Excel培训的来源。

本技巧(8029)适用于Microsoft Excel 97、2000、2002和2003。您可以在以下位置找到适用于Excel功能区界面的本技巧的版本(Excel 2007及更高版本):