【问题标题】:How can I tell if more than one 'IFS' condition is 'TRUE' and not just the first match?如何判断多个“IFS”条件是否为“TRUE”,而不仅仅是第一个匹配项?
【发布时间】:2019-12-03 01:43:52
【问题描述】:

在 Excel 365 中,我使用“IFS”语句扫描多个列,以确定单元格的值是否在任何列中。我相信“IFS”将处理您的所有条件,直到它达到第一个“TRUE”然后输出。但是,我希望能够找到我的条件为真的所有实例,并以某种方式输出或评估它们。有没有办法用 IFS (或其他方法)做到这一点?我想我想在单独的行中输出每个真实条件的匹配值,但是任何可以帮助我查看匹配的数量和/或每个匹配在哪一列的内容都会有所帮助。

由于我的列在其他工作簿中,我的代码有点多,因此我将仅分享一个紧密的示例。此公式将位于输出匹配项的单元格中,即下方的 D 列。

  A  |  B   |  C   |    D    |  E
------------------------------------
ColA | Col1 | Col2 | Formula | Notes
------------------------------------
  1  |   1  |   2  |    1    | Two matches in same column (Col1)
  2  |   1  |   2  |    2    | Two matches in same column (Col2)
  3  |   3  |   3  |    3    | Two matches in diff column (Col1 & Col2)

=IFS(
NOT(ISERROR(MATCH(INDIRECT("A"&(ROW())),INDIRECT("B:B"),0))),
INDEX(INDIRECT("B:B"),MATCH(INDIRECT("A"&(ROW())),INDIRECT("B:B"),0)),
NOT(ISERROR(MATCH(INDIRECT("A"&(ROW())),INDIRECT("C:C"),0))),
INDEX(INDIRECT("C:C"),MATCH(INDIRECT("A"&(ROW())),INDIRECT("C:C"),0))
)

当然,预期的输出是转储第一个条件为真的匹配值,但如果可能的话,我想在单独的行中输出条件为真的所有实例。也许是这样的......

  A  |  B   |  C   |    D    |  E
------------------------------------
ColA | Col1 | Col2 | Formula | Notes
------------------------------------
  1  |   1  |   2  |    1    | Two matches in same column (Col1)
 ... |  ... |  ... |    1    | Two matches in same column (Col1)
  2  |   1  |   2  |    2    | Two matches in same column (Col2)
 ... |  ... |  ... |    2    | Two matches in same column (Col2)
  3  |   3  |   3  |    3    | Two matches in diff column (Col1 & Col2)
 ... |  ... |  ... |    3    | Two matches in diff column (Col1 & Col2)

在上面和我的实际情况中,“...”将显示该特定行匹配的列中的内容,这可能在整个工作表中从一行到另一行有所不同。基本上,示例中的 D 列将位于单独的“结果”表上,其列数和列值类型与正在搜索的所有“数据”表相同。此外,“结果”表的每一列都是一个公式,扫描所有表中的一个特定列,但只输出匹配行的给定列值。像下面这样...

     DATA SHEET
  A   |   B   |   C   
----------------------
FName | LName | Amount 
----------------------
John  | Doe   |  10    
Jane  | Doe   |  4    
Jack  | Black |  10    

    RESULTS SHEET 
(all cells are formulas)
  A   |   B   |   C   
----------------------
FName | LName | Amount 
----------------------
John  | Doe   |  10   < matching value in C     
Jack  | Black |  10   < but different A & C

我希望最后一部分回答了任何“为什么”的问题。 ;)

补充(2019 年 7 月 25 日): 下面是我在上面的表格上使用的完整公式,但有更多列。除了我要求知道所有匹配项发生在哪里,而不仅仅是 IFS 语句中的第一个匹配项之外,它运行良好。列“F”是我匹配的列,用于将数据表(5 张)上匹配行上的列单元格中的相应值输出到公式化的“结果”表,如上所示。单元格之间公式中唯一发生变化的是“A:A”到“B:B”等,包括“F:F”(来自“SOURCES!$B$2”的值为“匹配”的列"),我在公式案例中设置了最后一个条件,在其他数据表中没有找到任何内容,粘贴自己的数据来代替 0、N/A 或 FALSE。

=IFS(
NOT(ISERROR(MATCH(INDIRECT((SOURCES!$B$2)&"F"&(ROW())),INDIRECT((SOURCES!$B$3)&"F:F"),0))),
INDEX(INDIRECT((SOURCES!$B$3)&"A:A"),MATCH(INDIRECT((SOURCES!$B$2)&"F"&(ROW())),INDIRECT((SOURCES!$B$3)&"F:F"),0)),
NOT(ISERROR(MATCH(INDIRECT((SOURCES!$B$2)&"F"&(ROW())),INDIRECT((SOURCES!$B$4)&"F:F"),0))),
INDEX(INDIRECT((SOURCES!$B$4)&"A:A"),MATCH(INDIRECT((SOURCES!$B$2)&"F"&(ROW())),INDIRECT((SOURCES!$B$4)&"F:F"),0)),
NOT(ISERROR(MATCH(INDIRECT((SOURCES!$B$2)&"F"&(ROW())),INDIRECT((SOURCES!$B$12)&"F:F"),0))),
INDEX(INDIRECT((SOURCES!$B$12)&"A:A"),MATCH(INDIRECT((SOURCES!$B$2)&"F"&(ROW())),INDIRECT((SOURCES!$B$12)&"F:F"),0)),
NOT(ISERROR(MATCH(INDIRECT((SOURCES!$B$2)&"F"&(ROW())),INDIRECT((SOURCES!$B$13)&"F:F"),0))),
INDEX(INDIRECT((SOURCES!$B$13)&"A:A"),MATCH(INDIRECT((SOURCES!$B$2)&"F"&(ROW())),INDIRECT((SOURCES!$B$13)&"F:F"),0)),
NOT(ISERROR(MATCH(INDIRECT((SOURCES!$B$2)&"F"&(ROW())),INDIRECT((SOURCES!$B$14)&"F:F"),0))),
INDEX(INDIRECT((SOURCES!$B$14)&"A:A"),MATCH(INDIRECT((SOURCES!$B$2)&"F"&(ROW())),INDIRECT((SOURCES!$B$14)&"F:F"),0)),
NOT(ISERROR(MATCH(INDIRECT((SOURCES!$B$2)&"F"&(ROW())),INDIRECT((SOURCES!$B$2)&"F:F"),0))),
INDEX(INDIRECT((SOURCES!$B$2)&"A:A"),MATCH(INDIRECT((SOURCES!$B$2)&"F"&(ROW())),INDIRECT((SOURCES!$B$2)&"F:F"),0))
)

我制定的“结果”工作簿还有一个名为“SOURCES”的工作表,我用它来粘贴文件名以连接所有数据表对应的列。

顺便说一句,在获取已找到客户密钥的所有表和列(使用 SQL)然后进行比较后,我将其用作工具来“取消合并”我们 LIVE 站点/数据库中的配置文件之间的客户数据(使用 Excel)到我们的 TEST 站点,这样我就可以从 LIVE 合并中提取不属于“保留”记录的数据。在这种情况下,合并了 3 条记录。两条记录在 TEST 站点中有一个配置文件,而来自 LIVE 站点的保留记录实际上没有 TEST 记录,给了我 5 张数据来检查。

【问题讨论】:

  • 不是答案,而是注释。尽可能避免使用 INDIRECT。您正在使用 INDIRECT 代替相对和绝对符号:INDIRECT("A"&amp;(ROW())) 应该是 $A2 其中第 2 行是放置公式的第一行,因为它被向下拖动,2 将变为 3,依此类推。 INDIRECT("B:B") 应该只是 $B:$B。 INDIRECT 是不稳定的,并且会导致公式重新计算,即使数据没有改变,只要 Excel 重新计算。
  • 我很难理解当时的情况以及您想要达到的目标。或许可以简单解释一下原始数据集中有哪些信息,具体要查找哪些信息,以及为什么需要进行这样的匹配和查找?
  • 您可能正在寻找 AND()OR()(例如,=IF(AND(...))
  • Scott,谢谢,已注明。顺便说一句,我添加了更多内容以帮助理解我的案例... Terry,我在 ADDITION 下添加了更多内容,希望对您有所帮助... Sinaraheneba ,我会考虑您的建议并在需要时回复,谢谢。

标签: excel excel-formula


【解决方案1】:

假设您的数据从 A2:C2 范围开始

我认为这个公式可以帮助你, 数组公式(使用 Ctrl+Shift+Enter)

=INDEX($A2:$C2,MATCH("OK",IF(ISNUMBER($A2:$C2),"OK",""),0))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-23
    • 2019-03-12
    • 1970-01-01
    相关资源
    最近更新 更多