从地址中提取街道号码(Microsoft Excel)
艾伦(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及更高版本):