【问题标题】:How to MATCH based on values from multiple columns如何根据多列的值进行 MATCH
【发布时间】:2014-09-01 14:40:56
【问题描述】:

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

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 和任何其他任意字段——以及如果每个值在被评估的行在死亡表的单行中找到,然后它会输出真或假(或其他一些有用的值)。所以字符表应该如下所示:

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,但如果您认为基于 Excel 的解决方案也可以在 Calc 中使用,则可以接受。

【问题讨论】:

    标签: formula libreoffice-calc


    【解决方案1】:

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

    =NOT(ISERROR(MATCH(连接(A2,B2,C2),连接(A$11:A$14,B$11:B$14,C$11:C$14),0)))

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

    【讨论】:

    • 好的。所以就像 Zero 建议的那样,但没有辅助列。有道理。
    【解决方案2】:

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

    解决方案的本质是什么:

    一系列嵌套的 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)
    

    希望对你有帮助。

    【讨论】:

    • 好的,当所有三列都不为空时它可以工作。所以它会为“Lady Experts Exchange”提供正确的结果,它有一个标题、名字和姓氏,但对于标题字段为空的“Leo King”则不正确。你能想出什么办法来解决这个问题吗?否则这是个好主意:)
    • 如果不清楚的话,“Lady Experts Exchange”会输出true,“Leo King”会输出false,而他们都应该输出true。
    • 老实说,一个更好的解决方法是用 && 连接单元格,然后 COUNTIF 你要检查的字符(所以你在两个表中连接)在死表中。但是您必须为两个表创建一个新列,但它应该可以正常工作。
    • 好点。考虑到我已经连接了单元格,我应该想到这一点......
    • 我不知道,我现在在火车上。回家后我会尝试并报告。
    猜你喜欢
    • 2019-12-18
    • 1970-01-01
    • 1970-01-01
    • 2019-05-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-19
    • 1970-01-01
    相关资源
    最近更新 更多