计算下一次出现的细胞数量

时间:2014-09-23 21:04:33

标签: excel excel-vba vba

我有一长串的约5000件物品。每个项目都标有1-5之间的数字。此列表中的第一项是1.我想在每次有1时识别,然后计算有多少单元格,直到有另外一个1.我然后想要将与每个单元格关联的值相加以找到标记为1的每个细胞的“总数”。

说我的表看起来像这样(我们会看第3列):

+-----+----+---+
| 20  | A  | 1 |
| 30  | B  | 2 |
| 10  | C  | 2 |
| 20  | D  | 3 |
| 50  | E  | 2 |
| 30  | F  | 1 |
| 40  | G  | 2 |
| 40  | H  | 3 |
| 10  | I  | 5 |
| 50  | J  | 1 |
+-----+----+---+

在A行中,总和将是A-E,130的总和。 在行F中,求和将是F-I,120的总和。

我需要回答的唯一部分是在这个算术中计算A-E行数的语法。

谢谢!

2 个答案:

答案 0 :(得分:1)

我认为最简单的方法是在单元格D1中添加以下公式:

=IF(C1=1,SUM(OFFSET(A1,0,0,MATCH(1,C2:$C$10,0))),"")

(显然将$C$10更新到数据集的末尾)并向下拖动

基本上,你所说的是:

  • 如果C列为1,则:
    • 从我的行开始获取A列的总和并一直向下,直到您匹配1的下一个值
  • 或者其他人返回""

这依赖于Match()函数将在第一次找到匹配时返回的事实,因此它会在您的C2之后直接从该行开始,并继续查找{的下一个值{1}}一直到数据集的底部 - 在这种情况下,1

希望这有道理并做到这一点!

答案 1 :(得分:1)

索引的替代方案。偏移是不稳定的,并且会在任何单元格更改时导致重新计算整个工作表。使用可导致缓慢的大型数据集。

索引不易变。您可以使用:

=IF(C1=1,SUM(A1:INDEX(A2:$A$9999,MATCH(1,C2:$C$9999,0)-1)),"")

为确保公式的最后结果正确,请添加" 1"同一列中的源数据下面的行中的值(" C")

注意:如果要使用范围大于当前数据集的偏移变体,也需要这样做。否则两个公式都找不到最终的" 1"并将返回#N / A.

Offset公式和固定范围还有另一个问题。当前应用的公式

=IF(C1=1,SUM(OFFSET(A1,0,0,MATCH(1,C2:$C$10,0))),"")

然后向下复制到第10行将导致第10行中的此公式:

=IF(C10=1,SUM(OFFSET(A10,0,0,MATCH(1,C$10:$C11,0))),"")

如果源数据的数据范围不固定,则需要先操作公式的最后一行,然后再将其复制下来。

相关问题