如何根据多列的值进行匹配

时间:2014-09-01 14:40:56

标签: excel-formula openoffice-calc libreoffice-calc

我的第一张桌子记录了“冰与火之歌”系列中的人物。我的第二张桌子记录了“冰与火之歌”中死亡的角色。在我的第一个表的第四列中,我想测试每一行,看看第二个表上是否有匹配的行;如果是这样,那个角色可以说已经死了。这里是发明的样本数据,以免破坏系列:

Characters table
+---------+---------+-----------+---------+
| Title   |  Name   |  Surname  | HasDied |
+---------+---------+-----------+---------+
| Ser     |  Jon    |  Skeet    |         |
| Lord    |  Jeff   |  Atwood   |         |
|         |  Leo    |  King     |         |
| Maester |  Joel   |  Spolsky  |         |
| Lady    | Experts | Exchange  |         |
+---------+---------+-----------+---------+

Death table
+---------+---------+-----------+
| Title   |  Name   |  Surname  |
+---------+---------+-----------+
|         |  Leo    |  King     |
| Ser     |  John   |  Doe      |
| Lady    | Experts | Exchange  |
+---------+---------+-----------+

在字符表的HasDied列中,我想检查该行的每个值 - TitleNameSurname以及任何其他任意字段 - 如果正在评估的行中的每个值都在死亡表的单行中找到,那么它将输出true或false(或其他一些有用的值)。因此字符表应该如下所示:

Characters table
+---------+---------+-----------+---------+
| Title   |  Name   |  Surname  | HasDied |
+---------+---------+-----------+---------+
| Ser     |  Jon    |  Skeet    |  FALSE  |
| Lord    |  Jeff   |  Atwood   |  FALSE  |
|         |  Leo    |  King     |  TRUE   |
| Maester |  Joel   |  Spolsky  |  FALSE  |
| Lady    | Experts | Exchange  |  TRUE   |
+---------+---------+-----------+---------+

我知道我可以使用MATCH在死亡表中查找任何一个值,但我不能为每列使用三个单独的MATCH公式,重要的是匹配值在同一行。如何编写可以进行此搜索的公式?我使用的是LibreOffice Calc,但如果您认为它们也适用于Calc,则可以接受基于Excel的解决方案。

2 个答案:

答案 0 :(得分:1)

一次性回答原始问题的建议是数组公式

= NOT(ISERROR(MATCH(CONCATENATE(A2,B2,C2),CONCATENATE(A $ 11:一种$ 14 B $ 11:B $ 14 C $ 11:C $ 14),0)))

这将连接字符表中每个名称的三个部分,并在死亡表中连接每个名称的三个部分形成的数组中查找。

答案 1 :(得分:0)

这需要一些认真思考,所以我希望这是你正在寻找的答案。

解决方案本质上是什么:

一系列嵌套的IF语句,其中包含COUNTIF语句,它基本上检查每个列是否可以在第二个表中找到该名称。如果是,它将检查下一列等。逻辑测试是每列的COUNTIF值是否大于0,然后我们知道该字符已死。

以下是公式,它假设表格在同一工作表中彼此重叠

=IF(COUNTIF(A$11:A$14,A2)>0,IF(COUNTIF(B$11:B$14,B2)>0,IF(COUNTIF(C$11:C$14,C2)>0,TRUE,FALSE),FALSE),FALSE)

我希望它有所帮助。