Excel列缺少数据

时间:2018-06-14 20:19:41

标签: excel excel-formula

我有一个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中显示,而不是在同一行上。

1 个答案:

答案 0 :(得分:0)

如果列表1位于列AB中,而列表2位于列CD中,则选择与列表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来包装它以消除错误。