【问题标题】:COUNTIF Function, reset count if value equalsCOUNTIF 函数,如果值等于则重置计数
【发布时间】:2016-07-01 21:20:10
【问题描述】:

我需要在 A 列中列出 B 列中每次出现值“4A”的运行计数,但如果 B 列中的值等于“2B”,则计数需要重置为 0。

我附上了我的工作簿样本,A 列显示了我需要如何操作计数。我愿意使用 VB 或公式。

或者文本格式:

| A | B  |
+---+----+
| 0 | 2B |
|   | 3A |
| 1 | 4A |
|   | 4B |
|   | 4B |
| 2 | 4A |
|   | 4B |
| 3 | 4A |
|   | 9A |
| 0 | 2B |
|   | 3A |
| 1 | 4A |
|   | 4C |
| 2 | 4A |
|   | 9A |
| 0 | 2B |
|   | 3A |
| 1 | 4A |
|   | 9A |
| 0 | 2B |
|   | 3A |
| 1 | 4A |
|   | 4C |
|   | 9A |
|   | 9B |
|   | 9Z |

【问题讨论】:

  • 是否有必要像样表中那样隐藏重复值?
  • 减 1 用于发布样本数据的图像。
  • 添加了文本版本,供那些发现它的缺失有问题的人使用。

标签: excel vba count formula countif


【解决方案1】:

编辑

@Jeeped 和@trincot 提出了更好的非数组版本。我在这里稍微修改了一下:

@Jeeped 的公式:

=IF(OR(B1={"2B","4A"}), COUNTIF(INDEX(B:B,AGGREGATE(14, 6, ROW(B$1:B1)/(B$1:B1="2B"), 1)):B1, "4A"),"")

修改后它在聚合中使用LARGE函数而不是SMALL""而不是TEXT(,)


@trincot 的公式:

=IF(OR(B2={"2B","4A"}),(B2="4A")*(1+IFERROR(INDEX(G:G,MATCH(MAX(G$1:OFFSET(G2,-1,0))+1,G$1:OFFSET(G2,-1,0))),0)),"")

与原版相比,它稍微“按 IF 方式”重新排列,我还将魔术 9999 替换为 MAX([...]) + 1 并制作它,以便您可以将其粘贴到第一个单元格并向下拖动,而不是使用两个单独的公式对于第一个单元格和连续的单元格。


我的原版:

我认为它的好处可能是最容易理解(?-我显然在这里有偏见,所以我可能是错的)而且它实际上是最短的。

它有一个明显的缺点,即是一个数组公式。

在单元格“A1”中你可以写:

=IF(OR(B1="2B",B1="4A"),SUM((B$1:B1="4A")*(ROW(B$1:B1)>MAX(ROW(B$1:B1)*(B$1:B1="2B")))),"")

这是一个数组公式,所以你必须用 ctrl + shift + enter 确认它。

然后你就可以往下拉了。

如果计数的“4A”行大于“2B”的最后一行,它基本上会计算从当前行到第一行的范围内“4A”的出现次数。

【讨论】:

  • @Jeeped - 请原谅我在不同的地方问(因为我的声誉) - 在此处发布示例数据的图像有什么问题?在这种情况下,重现一个可行的示例几乎需要零努力。
  • 我能指出的最好的帖子是Why not images of Code and Sample DataDiscourage screenshots of code and/or errors。除此之外,寻求帮助(并且没有表现出任何原始努力)的人不应该期望多个其他用户重新输入他们的数据只是为了帮助他们。
  • 不错的数组公式顺便说一句;我用 AGGREGATE 处理了一个非数组来执行循环处理,但你的更短(=IF(OR(B1={"2B","4A"}), COUNTIF(INDEX(B:B, AGGREGATE(15, 6, ROW($1:1)/(B$1:B1="2B"), COUNTIF(B$1:B1, "2B"))):B1, "4A"), TEXT(,)))。
【解决方案2】:

这是一种使用标准(非数组)公式的方法:

在 A1 中放置:

=IF(B1="4A",1,0)

在 A2 中放置:

=IF(B2="2B",IF(INDEX(A:A,MATCH(9999,A$1:A1))>0,0,""),
            IF(B2="4A",1+INDEX(A:A,MATCH(9999,A$1:A1)),""))

将 A2 向下拖动/复制到 A 列中的剩余单元格。

这将产生空白,否则将显示相同的值。

如果不需要抑制重复值,则可以将A2中的公式简化为:

=IF(B2="2B",0,IF(B2="4A",1+A1,A1))

...并将其复制下来。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-02-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-05
    • 2021-09-03
    • 2023-01-07
    相关资源
    最近更新 更多