【问题标题】:Return the count of the most frequently occurring string based on multiple criteria根据多个条件返回最频繁出现的字符串的计数
【发布时间】:2015-07-19 21:19:09
【问题描述】:

我在 Excel 2013 中有一个大型数据表,类似于以下内容:

A(Include?)  B(Name)       C(Region)

   1        John Doe        North
   0        Jim Stevens     South
   0        Tom Brooks      West
   1        Bob Smith       West
   1        Mike Thomas     North
   0        Steve Adams     East
   1        John Smith      Northwest

我需要帮助想出一个 Excel 公式,该公式将向我显示最频繁出现的 Region 名称的计数,但前提是相应的 Include? 值相等到 1。

在本例中,我需要的公式将输出数字 2,因为 North 是 Region 列中出现频率最高的条目,同时只计算 Include? 值等于 1。

我已经能够使用以下数组函数找到最常出现的区域(不考虑包含列):

=INDEX(C:C,MODE(IF(C:C<>"",MATCH(C:C,C:C,0))))

然后我可以使用以下方法找到该值在列中出现的次数:

=COUNTIF(C:C,INDEX(C:C,MODE(IF(C:C<>"",MATCH(C:C,C:C,0)))))

但是,当我尝试说明 Include? 列时,我没有得到正确答案。我的最佳猜测是:

=COUNTIFS(C:C,C:C,INDEX(C:C,MODE(IF(C:C<>"",MATCH(C:C,C:C,0)))),A:A,1)

看来,这个公式仍在寻找原始 Region,并简单地告诉我它在 Include? 等于 1 的行中出现的次数,而不是根据这个额外的限制重新计算最常出现的区域。

我希望所需的公式能以某种方式结合 COUNTIFS 和/或 SUMIFS 和/或一些 INDEX+MATCH 组合,但我愿意接受其他选择。

【问题讨论】:

  • 我们可以帮助您调试/修复您已经尝试过的东西,但我们不是免费的咨询服务。
  • 我已经为此工作了好几天,尝试了 COUNTIFS 标准和 INDEX(MATCH()) 策略的不同组合。不是在寻找“免费咨询服务”,只是任何以前见过这种情况的人,或者可能比我知道的更多。
  • 查看自 Excel 2010 起可用的 AGGREGATE function。展示您以前的努力(成功与否)的示例更有可能为您提供所需的帮助。
  • @Phil,这很酷。向我们展示您的尝试。如果有太多,最新的例子。您的问题必须包括您为复制您的问题所做的最少工作。
  • 好的,我已经编辑了我的问题以显示我迄今为止的最佳猜测。如果有人能提供任何见解,将不胜感激!

标签: excel excel-formula


【解决方案1】:

试试这个:

=COUNTIFS(A:A,1,C:C,INDEX(C:C,MODE(IF(C:C<>"",MATCH(C:C,C:C,0)))))


这是一个数组公式,所以按ctrl+shift+enter来计算公式。
告诉我它是否不起作用。 我在示例工作表中尝试了这个公式,得到了预期的结果。

【讨论】:

  • 你是按ctrl+shift+enter来计算公式吗?
  • 我确实通过 ctrl+shift+enter 来计算,但我没有得到正确的答案。
  • @Mr.Mascaro 因此在您的示例中,您期望 2,因为 A 列中带有 1 的 North 的计数为 2。对吗?
  • @是的。即使在数据更改后,我也验证了它适用于多个测试用例。
  • @Mr.Mascaro 请试试这个公式,复制粘贴时要注意。它正在为我返回预期的答案。
【解决方案2】:
=INDEX(C:C,MODE(IF(A:A=1, MATCH(C:C,C:C,0))))

你们很亲密。如果更改数组函数以检查 A 列是否等于 1,而不是检查 C 列是否为空白,那么您需要做的就是这对您有用。我测试了一些不同的场景。

注意:输入公式后,您必须在 PC 上按 SHIFT + CTRL + ENTER 或在 Mac 上按 COMMAND + ENTER。

【讨论】:

    【解决方案3】:

    标准(非数组)公式检索C列(例如北、南、西等)中重复出现的最大次数,其中A列是1

    =MAX(INDEX((A2:A99=1)*COUNTIFS(A2:A99, 1, C2:C99, C2:C99), , ))
    

    【讨论】:

    • 谢谢,但这绝对不是计算我要查找的值。
    • 这不起作用。它只是给出了 C 列中最常见值的计数。我可以更改 A 列中的所有值,但没有任何变化。
    • 抱歉 - 我从示例工作表中粘贴了错误的公式。
    • 这行得通,但它覆盖的行越多,几何速度就越慢。任何超过 200 行的内容都会导致每次重新计算的速度大大降低。
    • @Mr.Mascaro - 请定义'大减速'。我刚刚在 5000 行上计时,计算时间为 0.363 秒(5 年的 i5 笔记本电脑/32 位 Excel 2010)
    【解决方案4】:

    公式:
    =COUNTIFS($A:$A,1,$C:$C,MODE.SNGL(VALUE($C$2:$C$7)))

    此公式计算 Include? 等于 1 且 RegionRegion 中值的模式的行。我正在利用地区名称都有不同的首字母这一事实。

    注意:如果模式函数中出现“平局”,则取最接近表格顶部的值。

    【讨论】:

    • 谢谢!这几乎正​​是我所需要的,但也许我应该在我的示例中指定所有区域名称都没有唯一的首字母。我也有西北、西南等...
    • 所以...您的问题包含无效数据?您应该在问题中列出您所在的地区。
    • 好的,我进行了请求的更改。
    • 所以你只有北、南、东、西和西北?
    • 我一共有30个地区,就不一一列举了。如果可能的话,我希望公式不对区域名称进行硬编码,因为并非我的所有区域每天都适用。
    猜你喜欢
    • 2015-07-07
    • 2021-07-14
    • 2021-03-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-26
    • 1970-01-01
    • 2019-05-11
    相关资源
    最近更新 更多