【问题标题】:Excel - How to count number of rows in range (i.e. various columns) that contain certain string?Excel - 如何计算包含特定字符串的范围(即各种列)中的行数?
【发布时间】:2015-08-15 14:56:49
【问题描述】:

我有一个字符串列表 A,我想查看每个字符串在范围 B 中表示的行数是否以及是否是。我的数据如下所示:

列表 A:

   E
1 aaa
2 bbb
3 ccc

范围 B:

   A      B      C
1 aaa    ---    ---
2 bbb    ccc    bbb
3 aaa    ---    ---

我想要的结果是,在列表 A 中,“aaa”会告诉我 2,“bbb”会告诉我 1,“ccc”会告诉我 1。一直在尝试使用以下数组公式执行此操作,但它没有似乎正在工作:

=SUM(IF(COUNTIF(Range B,List A($A1)>0,1,0))

【问题讨论】:

  • @Jeeped 我很确定您的编辑是错误的。目的是范围 B 跨越多个列,而不仅仅是 1。请考虑回滚(不幸的是,这也会导致您的答案错误)
  • 哦!我想我终于明白你的意思了。你很可能是对的。
  • 是的,很抱歉没有澄清,我的问题是针对 Range B 跨越多个列的情况

标签: excel excel-formula excel-2010 excel-2013


【解决方案1】:

尽管我尽量避免鼓励使用 volatile OFFSET¹ function,但它似乎是这种情况下最有可能的候选者。

        

F2中的数组公式是,

=SUM(SIGN(COUNTIF(OFFSET(A$2, ROW($1:$99)-1, 0, 1, 3), E2)))

数组公式需要用 Ctrl+Shift+Enter↵ 完成。一旦正确输入第一个单元格,它们就可以像任何其他公式一样被填充或向下或向右复制。

¹OFFSET 被认为是一个 volatile 函数,每当工作簿中的任何内容发生变化时都会重新计算。

【讨论】:

  • 似乎我们的想法类似。我喜欢你使用sign 函数。
  • 是的,我第一次通过误解问题的样本数据把它搞砸了,但如果你给我 99 次尝试,我可能会做对! :P
【解决方案2】:

如下图

BA1:C4 范围的名称。在 F1 中(列表中的第一个元素 A 旁边),输入:

=SUM(IF(COUNTIF(OFFSET(B,ROW(B)-1,0,1),E1)>0,1,0)

(使用 Ctrl + Shift + Enter 输入)并向下复制。

它应该足够灵活以处理增长到更多行和列的B

【讨论】:

    【解决方案3】:

    这里已经发布了一些很棒的答案,但我想我会再添加一个。如果您正在处理大型数据集,则此公式在速度方面可能会派上用场。您可以将公式放在 F1 中(见下图)并复制下来。输入公式时需要使用 CTRL + SHIFT + ENTER

    =SUM(IF(FREQUENCY(IF(E1=$A$1:$C$3,ROW($A$1:$C$3)),IF(E1=$A$1:$C$3,ROW($A$1:$C$3)))>0,1))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-10-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-09
      相关资源
      最近更新 更多