我有一个excel电子表格,其中一个列表的两列中的名称日期匹配,第二列表中两列的相同名称日期匹配。
一个列表比另一个列表长,如何从其他列表中找到匹配日期/名称中缺少的数据?
例如,让我们说
List 1 List2
1/2/2012 Tim 1/2/2012 Tim
2/2/2012 Jill 2/2/2012 Jill
3/2/2012 Bob
所以基本上我需要搜索列表一并发现列表2缺少“3/2/2012 Bob”,日期和名称都在各自的列中。
我该怎么做?请记住,这些列表没有顺序,并且list2中的某个人可能会在list1中显示,而不是在同一行上。
答案 0 :(得分:0)
如果列表1位于列A
和B
中,而列表2位于列C
和D
中,则选择与列表1大小相同的区域(或列表1的大小减去List2 - 确保它有2列)并将其作为数组公式输入( ctrl + shift + 输入 ):
=IFERROR(INDEX(A2:B4,SMALL(IFERROR(MATCH(A2:A4&B2:B4,C2:C3&D2:D3,0)+ROWS(A2:A4),ROW(INDIRECT("1:"&ROWS(A2:A4)))),ROW(INDIRECT("1:"&ROWS(A2:A4)))),{1,2}),"")
根据需要展开行。此外,您需要将第一个输出列格式化为日期。
说明更新 “评估公式”对话框有助于分解复杂的公式。选择具有公式的单元格并按 alt 然后 T 然后 U 然后 F (对于棘手的公式,“TUF” ...)。
从MATCH
功能开始。由于我们正在寻找日期名称匹配,因此将名称和日期列与&
连接起来。 MATCH
将告诉我们列表1中的哪些对也在List2中(具体在哪里 - 我们将在List2中获得列表1中找到匹配的索引数组)。如果未找到匹配项,则会返回#NA
。因此对于OP的示例MATCH
将返回{1; 2; #NA}(List 1数组中的第一个值位于List2中的第1位,第二个值位于第2位,第三个值不是在List2中找到。
内部IFERROR
中的第二个参数是List 1的索引数组。ROWS
返回范围内的行数,INDIRECT
返回一个安全(意味着它赢了)不会被意外删除或移动)引用第1行到ROWS
返回的数字,ROW
返回每行的行号 - 所以在OP的例子中,这是{1 ; 2; 3}
我们希望列表1中的元素在List2中找不到 ,因此我们将列表1中的行数添加到非错误MATCH
结果中。这会将这些值发送到SMALL
返回的数组的末尾。对于OP的示例,作为SMALL
的第一个参数传递的数组是{4; 5; 3}。
现在我们想要使用SMALL
将感兴趣的指数带到顶部。我们再次使用ROW(INDIRECT("1:"&ROWS(A2:A4)))
作为SMALL
中的第二个参数,将数组从最小到最大排序。对于OP的示例,结果数组是{3; 4; 5}。
然后我们将该数组作为“row_num”参数传递给INDEX
,将{1,2}作为列参数传递。然后,INDEX
将从我们提供的范围中拉出两列作为SMALL
生成的数组中每一行的第一个参数。由SMALL
生成的数组末尾的值大于列表1中的行数(因为我们向它们添加了ROWS(A2:A4)
),因此它们将导致#REF!
错误。这些对应于在MATCH
函数中返回匹配的元素。我们用另一个IFERROR
来包装它以消除错误。