我有两个数据集(同一工作簿中的两个工作表),我需要在其中找到一个数据集中的条目。这两个数据集都格式化为表格,我使用组合INDEX(MATCH())
来匹配条目。如果找到匹配项,则数据集1应出现在数据集2这样我就知道有匹配,我并不真正关心返回的值。
不幸的是,我没有任何uniqueID
可以匹配的内容,因此我必须在每个表中使用两个字段的组合来尝试生成匹配。字段是[@Name]
和[@Surname]
,这在克罗地亚语中不太理想,因为名称阿迪斯·泰尔齐克显然不匹配阿迪斯·泰尔齐克。
问题
- 添加列(字段)数据集2不显示任何从数据集1但它显示的只是一个
#VALUE
错误。
知道我做错了什么吗?
我的语法如下:
=INDEX(Table1[@Field4],MATCH(Table1[@Name trim]&Table1[Surname trim], Table2[Name]&Table2[Last name], 0))
- 数据集1(表1)约有28000行、16列;
- 数据集2(表2)约有24000行、7列;
提前谢谢了!
答案1
您可能需要考虑添加辅助列,而不是让公式合并字段。公式更易于管理,您可以更轻松地比较上面提到的名称差异。
我会添加一个辅助列来合并您的姓名。由于您使用的是表格,因此它可能只是标题为“NameLookup”的列 =([Fname] & "" & [Lname])
那么你的索引匹配将会像这样
=IFERROR(INDEX(Table1[@Field4],MATCH(Table1[NameLookup],Table2[NameLookup],0),"Not Found")
我实际上有一张类似的表格,我需要比较两个姓名列表。我面临的挑战是处理中间名首字母和后缀(如 jr、sr、III 等)。更不用说多余的空格了……下面是我如何使用辅助列将其分解的快照: 它的工作原理如下:“检查全名”是一个 COUNTIF,将全名与第二张表上的列表进行比较。如果找到匹配项,那就好了。“名字、中间名、姓氏、无后缀” - 这些都是 TRIM 公式的变体,用于拆分姓名。
名:
=LEFT([@NAME],SEARCH(" ",[@NAME]))
中间:
=IFERROR(MID([@NAME],SEARCH(" ",[@NAME],1)+1,SEARCH(" ",[@NAME],SEARCH(" ",[@NAME],1)+1)-SEARCH(" ",[@NAME],1)),"")
姓:
=IFERROR(RIGHT([NAME],LEN([NAME])-SEARCH(" ",[NAME],SEARCH(" ",[NAME],SEARCH(" ",[NAME])+1))),RIGHT([@NAME],LEN([@NAME])-FIND(" ",[@NAME],1)))
无后缀:
=IFERROR(LEFT([@[Last Name]],FIND(" ",[@[Last Name]])-1),"")
最佳猜测是我用来帮助我找到与名称最接近匹配的一个列:
=IFERROR(IF([@[Check Full Name]]=0,INDEX(Marketing[NAME],MATCH([@DrillFirstNoSfx],Marketing[MarketFirstNoSfx],0)),""), "Not Found")
我在 NAME 单元格上使用条件格式来轻松确定是否匹配。黑色文本(检查全名 > 0),红色文本表示完全不匹配,黄色文本表示匹配度接近(最佳猜测列中的值)。
希望这些能够帮助您找到解决方案!