Farris有一个包含地址的工作表。一些地址非常接近,因此街道地址是相同的,只有地址的套间号部分不同。例如,一行可能具有地址“ Seymour Street 85,套房101”,另一行可能具有“ 85 Seymour Street,Suite 412”。 Farris想知道如何根据部分匹配(仅基于街道地址而忽略套房编号)删除地址列表中的重复项。

最简单的解决方案是将地址进一步分成单独的列,以使套件号位于其自己的列中。您可以按照以下步骤操作:

。确保地址栏右侧有空白栏。

。选择包含地址的单元格。

。显示功能区的“数据”选项卡。

。单击“数据工具”组中的“文本到列”工具。 Excel启动“将文本转换为列”向导。 (请参见图1。)

。在向导的第一步中,确保已选择“分隔符号”选项,然后单击“下一步”。

。在向导的第二步中,确保选中“逗号”复选框,然后单击“下一步”。

。在向导的第三步中,单击“完成”。

现在,街道地址应位于原始列中,而以前的空白列现在应包含原始地址中逗号后的所有内容。换句话说,套件号在其自己的列中。在这种情况下,您的数据很容易使用过滤来显示或提取唯一的街道地址。

如果您不想将地址永久分成两列,则可以使用公式确定重复项。假定地址列表已排序,则可以使用类似于以下的公式:

=IF(OR(ISERROR(FIND(",",A3)),ISERROR(FIND(",",A2))), "",IF(LEFT(A3,FIND(",",A3))=LEFT(A2,FIND(",",A2)), "Duplicate",""))

该公式假定要检查的地址在A列中,并且此公式位于另一列的第3行中的某个位置。它首先检查当前行中的地址或之前行中的地址中是否存在逗号。如果两个地址中都没有逗号,则假定没有可能的重复。

两者都有逗号,公式检查逗号前的地址部分。如果它们匹配,则单词“重复”

返回;如果它们不匹配,则不返回任何内容。

将公式复制到该列下(以使一个公式对应于每个地址)的结果是,您将拥有单词“ Duplicate”

出现在与先前地址的第一部分匹配的那些地址旁边。然后,您可以找出要处理的重复项的用途。

另一种选择是使用宏来确定可能的重复项。

可以使用多种方法来设计宏来确定重复项。此处显示的代码只是根据范围检查“键”值的前X个字符,并返回第一个匹配单元格的地址。

Function NearMatch(vLookupValue, rng As Range, iNumChars)

Dim x As Integer     Dim sSub As String

Set rng = rng.Columns(1)

sSub = Left(vLookupValue, iNumChars)

For x = 1 To rng.Cells.Count         If Left(rng.Cells(x), iNumChars) = sSub Then             NearMatch = rng.Cells(x).Address             Exit Function         End If     Next     NearMatch = CVErr(xlErrNA)

End Function

例如,假设您的地址在A2:A100范围内。

在B列中,您可以使用此NearMatch函数返回可能重复的地址。在单元格B2中输入以下公式:

=NearMatch(A2,A3:A$100,12)

函数(A2)的第一个参数是要用作“键”的单元格。将此单元格的前12个字符与A3:A $ 100范围中每个单元格的前12个字符进行比较。如果在前12个字符匹配的范围内找到一个单元格,则该函数将返回该单元格的地址。如果找不到匹配项,则返回#N / A错误。如果将B2中的公式向下复制到单元格B3:B100,则将A列中的每个对应地址与该地址下方的所有地址进行比较。您最终得到原始列表中可能重复的列表。

注意:

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

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

本技巧(7886)适用于Microsoft Excel 2007、2010、2013和2016。您可以在此处为Excel的较旧菜单界面找到此技巧的版本:

链接:/ excel-Removing_Duplicates_Based_on_a_Partial_Match [根据部分匹配删除重复项]。