我有一本工作簿,里面有两个独立的工作表。我想知道工作表 B 中出现的值是否也出现在工作表 A 中,如果是,我想返回“YES”。如果不是,我想返回“NO”。基于 A 列和 B 列。
在工作表 A 中,我有以下数据集:
NAME DOB
1 Bob Builder 1/1/2001
2 Patrik Str 2/2/2001
3 Thunder Ct 3/3/2001
4 peter Grif 4/4/2001
在工作表 B 中,我有以下数据集:
NAME DOB
1 Bob Builder 1/1/2001
2 Patrik Str 2/2/2001
3 Thunder Ct 3/3/2001
4 peter Grif 4/4/2001
5 Bob Builder 8/8/2011
6 Patrik Str 2/25/2001
我试过了,=IFERROR(IF(MATCH(A1,Sheet1!$A:$A,0),"yes",),"no")
但它只查找 A 列而不是 B 列。这之所以可以正常工作,只是因为它查看了 A 列,但还有其他同名但出生日期不同的学生。
Excel 中的 vlookup 或 match 函数是否可以通过比较列名标题(如姓名和 DOB)而不是 A、B 来使用。
答案1
您可以使用以下公式:
=IF(SUMPRODUCT(--('Worksheet A'!$A$2:$A$5='Worksheet B'!A2)*(--'Worksheet A'!$B$2:$B$5='Worksheet B'!B2))=1,"Yes","No")
$A$2:$A$5
第一个工作表中的名称数组将其更改为Name
列中的最后一个单元格并将$
其修复,以便您可以拖动它而不更改
A2 单独是第二个工作表中的名字
$B$2:$B$5 第一个工作表中的数组将其更改为列DOB
中的最后一个单元格并将其修复,以便您可以拖动它而不更改 B2 第二个工作表中 A2 的相应日期 当 A2 和 B2 都与相应数据匹配时,Sumproduct 将导致 1 如果结果为 1,则给出“是”,如果不匹配,则给出“否” 您可以将公式向下拖动 DOB
$
=IF(SUMPRODUCT(--(Name=A2)*(--DOB=B2))=1,"Yes","No")
如果您使用 Define Nameworksheet A
并给出Name
没有标题的 Name 列,
也可以给出没有标题DOB
的 DOB 列, 您可以使用上述公式并将其拖动worksheet A
如果您愿意使用Match
以下内容:
=IF(ISNA(MATCH(1,(--(Name=A2)*(--(DOB=B2))),0)),"No","Yes")
并同时 按下Ctrl
+ Shift
+ ( ) 您也可以拖动它 Enter
Array Formula
答案2
使用公式在每张表上创建第三列
= A2 & " " & B2
使用该列进行匹配。
答案3
使用表格和结构化引用可以相当简单。对于每个数据表,Insert ► Tables ► Table
并且此方法还允许您通过名称引用列标题。
默认名称为Table1
和Table2
——您创建的第一个表将为1
,第二个表2
,但您可以在公式 ► 名称管理器下重命名
然后,对于 C1 中的表 2,添加列标题(例如“在表 1 中”。应该会出现表格的第三列。
C2: =IF(SUMPRODUCT(([@NAME]=Table1[NAME])*([@DOB]=Table1[DOB])),"YES","NO")
该公式将自动向下传播并给出结果。
另一个选项(假设该NAME
列是第 1 列)是:
C2: =IF(VLOOKUP([@NAME],Table1,2,FALSE)=[@DOB],"YES","NO")
使用表格中的结构化引用时,@NAME
引用公式同一行中列标题“NAME”下的条目;Table1[NAME]
引用表 1 中的整个列(标题除外)。 [NAME]
单独引用同一张表中的整个列。
使用表格的另一个优点是,当您添加/删除相邻的行或列时,表格(和引用)将自动扩展/收缩。