如何在Excel中进行多列匹配

时间:2017-10-25 17:32:48

标签: excel

我有一个如下所示的电子表格:

    A      B      C      D
  ------------------------------------
1 | Yes  | No   |      |      |      |
2 | 1    | 1    | 0    | 1    | 0    |
  ------------------------------------
  ------------------------------------
12| Yes  | No   |      | Yes  | Yes  |
13| Yes  | Yes  | No   | No   |      |
14| Yes  | No   |      | No   | Yes  |
15| No   | Yes  | No   | No   |      |
...

我想根据几个标准用1或0填充第2行中的单元格。如果满足以下所有条件,则该值应为1(使用单元格D2作为参考):

  1. 第1行中的所有先前值应与从D12开始的表中的至少一个条目匹配。对于单元格D2,这意味着A1:C1应该与表格的至少一行中的列A:C完全匹配。
  2. 对于来自#1的任何匹配行,在与要评估的单元格相同的列中应该存在非空值。因此,单元格D2将在列D中查找与#1中的条件匹配的任何行中的非空值。
  3. 如果这些条件中的任何一个失败,则单元格值应为0.在单元格D2中,我们的值为1,因为算法在第12行和第14行中找到匹配,在D12和D14中找到非空单元格。

    我需要能够跨多个列动态应用它,所以我试图避免编写特定于列的函数。我意识到我可能会写一个UDF来执行此操作,但我想尽可能避免走这条路。

2 个答案:

答案 0 :(得分:2)

因为这是一个挑战,所以我想了解并提出了

=SIGN(SUM(--(MMULT(($A1:A1=$A12:A15)*(B12:B15<>""),TRANSPOSE(COLUMN($A12:A15)^0))=COLUMNS($A1:A1))))

进入B2并拉过来。必须使用 Ctrl Shift 输入

作为数组公式输入

A2我认为只是

=sign(counta(a12:a15))

因为除非整列都是空的,否则它将为1。

enter image description here

答案 1 :(得分:0)

我不确定你的问题有完整的答案,如所述没有一个UDF,但我会对该方法提出一些问题并说“为什么复杂'并且这个列不是空白(但可以是任何其他值)?“

为什么不向后寻找该字段的行匹配?在我看来,它只是按列移动,事实上,这正是你在A2中所做的,因为在A之前没有任何东西。所以在重复行上匹配,例如,D2将包含基本相同的信息你的例子在C2中。

要在字段中查找重复项,您可以使用类似于C2中的公式:=IF(SUMPRODUCT((A3:A15=A1)*1,(B3:B15=B1)*1,(C3:C15=C1)*1)>1,1,0)

在D2中,您将复制该公式并添加(D3:D15=D1)*1