【问题标题】:Countifs with OR criterias and ranges具有 OR 条件和范围的计数
【发布时间】:2022-09-23 15:12:32
【问题描述】:

我有 5 列颜色选项。我需要计算在所有选项中有多少与黑色不同。我的意思是,当它们在 5 列之一中有与黑色不同的东西时,它们被认为是颜色。如果不是,它们被认为是黑色的。即,如果“红色”出现在 5 列之一中,则为颜色。我试图在 Countifs 中添加 OR,并使用查询,但它不起作用。我发现的唯一方法是使用带有 if 条件的新列,但我需要将其嵌入到计数或查询公式中(我无法在主数据表中添加任何新列)。[我还不能嵌入图片,所以有一个屏幕截图。 ]

=if(OR(if(AND(L2<>\"Black\";L2<>\"\");\"COLOR\";\"\")=\"COLOR\";
   if(AND(M2<>\"Black\";M2<>\"\");\"COLOR\";\"\")=\"COLOR\";
   if(AND(N2<>\"Black\";N2<>\"\");\"COLOR\";\"\")=\"COLOR\";
   if(AND(O2<>\"Black\";O2<>\"\");\"COLOR\";\"\")=\"COLOR\";
   if(AND(P2<>\"Black\";P2<>\"\");\"COLOR\";\"\")=\"COLOR\");\"COLOR\";\"BLACK\")

我已经使用该公式作为界面,我可以计算其中有多少是彩色或黑色。它有效,但我需要结果而不添加任何额外的列。

我知道 countifs 中 \"comma\" 之后的任何语句都是 \"AND\",因此任何范围和条件都限制了需要完成所有条件。我需要他们作为“ORs”工作,但我没有找到办法。我需要类似的东西:

=countifs(AND(L:L,<>\"Black\"L:L<>\"\") *OR*  AND(M:M,<>\"Black\"M:M<>\"\") *OR* AND(N:N,<>\"Black\"N:N<>\"\") ...
  • 如果您将输入表和预期输出表添加到问题中,您的问题可以大大改善。 Tables 是比电子表格更好的选择来显示您的数据结构。如果您共享电子表格,请确保还添加工作表的图像以避免问题结束,因为此处的问题必须是 self containedYour email address can also be accessed by the public,当您共享 Google 文件时。
  • 预期的输出是什么?

标签: google-sheets google-sheets-formula


【解决方案1】:

尝试:

=INDEX(IF(TRIM(FLATTEN(QUERY(TRANSPOSE(L2:P),,9^9)))="",,
 IF(REGEXMATCH(FLATTEN(QUERY(TRANSPOSE(L2:P),,9^9)), "(?i)black"), "BLACK", "COLOR")))

或者:

=INDEX(IF(LEN(L2:L&M2:M&N2:N&O2:O&P2:P), UPPER(MAP(L2:L, M2:M, N2:N, O2:O, P2:P, 
 LAMBDA(L,M,N,O,P, IFS(L="BLACK",L,M="BLACK",M,N="BLACK",N,O="BLACK",O,P="BLACK",P,TRUE,"COLOR")))), ))


更新:

=INDEX(QUERY(IF(TRIM(FLATTEN(QUERY(TRANSPOSE(L2:P),,9^9)))="",,
 IF(REGEXMATCH(FLATTEN(QUERY(TRANSPOSE(L2:P),,9^9)), "(?i)\bblack\b"), "BLACK", "COLOR")), 
 "select Col1,count(Col1) where Col1 is not null group by Col1 label count(Col1)''"))

【讨论】:

  • 对不起。我查看了解释,但我没有正确表达我的自我(ENG 不是我的母语)。我发现如何使用 ifs 与 OR 和 AND 的组合来确定它们是彩色还是黑色(颜色是当它们在 5 列之一中至少有不同于空或黑色的东西时)。问题是我无法将其嵌入到 countif 中,因为我们正在将逐行检查的公式的结果与我想在完整列中全局检查的结果进行比较。而且我不想使用带有“COLOR”和“BLACK”的额外行,只需将它们计算在另一张表中即可。
  • @DanieldelSolar 你能分享一份你的工作表副本,并附上最终预期结果的例子吗?
  • @DanieldelSolar 答案已更新
【解决方案2】:

你可以在 I2 中这样做

=countif(byrow(L2:P,lambda(r,countifs(r,"<>Black",r,"<>"))),">"&0)

在 J2

=countif(byrow(L2:P,lambda(r,counta(r))),">"&0)-I2

如果您需要将公式放在不同的工作表中,请添加工作表参考,例如

=countif(byrow(Sheet6!L2:P,lambda(r,countifs(r,"<>Black",r,"<>"))),">0")

=countif(byrow(Sheet6!L2:P,lambda(r,counta(r))),">0")-A2

如果在单独的工作表的 A2 和 B2 中。

【讨论】:

  • 嗨,汤姆,您知道对 lambda 函数的实际内存限制/计算限制的任何引用吗?
  • 有趣的问题!不,我在撰写本文时没有。
  • @TheMaster 我听说它是​​ 10k - 我没有验证它
  • @player0 你在哪里听到的?在实践中,它比正常功能少得多……,就像我不断遇到限制一样少了 50 倍。
  • 我用一维数组尝试了它,但它在大约 100K 时失败了。例如,这虽然 =sum(byrow(sequence(99990,100),LAMBDA(r,sum(r)))) 有效,但不可否认它是一个非常简单的 lambda。
【解决方案3】:

非常感谢。我已经尝试了 player0 的解决方案,但它给了我一个错误的计数。我不理解公式的 100% 语法。我虽然是因为区域配置,但我将工作表设置为墨西哥,因为标题是西班牙语,但所有的公式和它的 sintax(或;)都是英文的,但它还没有工作。

Tom Sharpe 提供的编码运行良好。这是我第一次看到 lambda,不知道它,搜索我发现这是本月最近添加到 googlesheets 的。我会寻找有关这种计数方式的更多信息。

I sharing a copy of the sheet for easier comprehension of the topic. Many thanks to all.

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-12
    • 1970-01-01
    • 1970-01-01
    • 2020-05-22
    • 1970-01-01
    相关资源
    最近更新 更多