INDEX(,MATCH()) 组合在格式化为 TABLE 的数据中返回 #VALUE 错误

INDEX(,MATCH()) 组合在格式化为 TABLE 的数据中返回 #VALUE 错误

我有两个数据集(同一工作簿中的两个工作表),我需要在其中找到一个数据集中的条目。这两个数据集都格式化为表格,我使用组合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)) 

这是一个示例工作簿(Google Drive)。

  • 数据集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),红色文本表示完全不匹配,黄色文本表示匹配度接近(最佳猜测列中的值)。

希望这些能够帮助您找到解决方案!

答案2

在此处输入图片描述

在表2的列第一个单元格中输入此公式New1,然后向右向下填充。

=IFERROR(LOOKUP(2,1/(($A$28:$A$30=$J28)*($B$28:$B$30=$K28)),C$28:C$30),"No Match")

根据需要调整数据范围。

相关内容