此挑战不适用于 Excel,部分原因是SEARCH
并且FIND
只能从左到右工作并且只能定位第一个实例。但是,您不能希望从任何自动化解决方案中获得完美的结果,并且可能准备接受一个相对简单的近似值 - 即您可以选择在编码上花费多少精力而不是人工审查.
首先,我建议从您的第二张工作表创建一个查找表,其中 first_name、initial、last_name 和 first_name、last_name 都指向您在 ColumnF 中的值。在第一种情况下,您可能希望将“inc Initial”之类的内容连接到您的 ColumnF 值,以指示比不匹配初始值更接近的匹配。
然后我建议将第一张工作表的 ColumnA 复制到 ColumnB 并从 ColumnB 中删除 ESQ(至少对于未启动 ESQ 的姓氏!)。在美国,大约有 40,000 人的姓氏以“Esq”开头,但与放弃能够“忽略”Esquires 的便利相比,将这些作为单独的问题处理可能更容易。
我建议分别在 ColumnsC:N 中输入以下内容(假设 Row1 是数据标签):=FIND(" ",B2)
=IF(ISERROR(FIND(",",B2)),0,FIND(",",B2))
=LEN(B2)
=LEFT(B2,C2)
=IF(C2>0,MID(B2,C2+1,E2-C2+1),0)
=LEFT(G2,1)
=IF(ISERROR(FIND(" ",G2)),0,FIND(" ",G2))
=MID(G2,I2+1,E2-C2)
=IF(ISERROR(FIND(",",J2)),IF(ISERROR(FIND(".",J2)),0,FIND(".",J2)),FIND(",",J2))
=IF(K2=0,J2,LEFT(J2,K2-1))
=IF(I2>0,F2&H2&" "&L2,F2&L2)
=VLOOKUP(M2,array,2,FALSE)
其中 'array' 是 Sheet2 中的查找表。
在您的 13 个样本中,应该给您 8 个“匹配”,其中 5 个包括中间名首字母的匹配。如果不够好,那么只需继续在右侧的列中添加更多公式,直到达到您的权衡点(例如,尽管您的第 13 个示例是上述 5 个不匹配的示例之一,但如果在单独的列中它会这样做您没有连接“P” - 事实上它在其他列中匹配表明它不像其他 8 个那样匹配)。你可以像对待 ESQ 一样对待 ATTY,尽管在美国有超过 100,000 人使用这个姓氏。
或者,您可以提供赏金或尝试 freelancer.com,我希望您会发现很多人愿意为一小笔钱提供代码,这些代码不仅更具选择性,而且可能会给您一个“分数”来表明如何可能是任何“匹配”。