我有一长串的约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行数的语法。
谢谢!
答案 0 :(得分:1)
我认为最简单的方法是在单元格D1
中添加以下公式:
=IF(C1=1,SUM(OFFSET(A1,0,0,MATCH(1,C2:$C$10,0))),"")
(显然将$C$10
更新到数据集的末尾)并向下拖动
基本上,你所说的是:
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))),"")
如果源数据的数据范围不固定,则需要先操作公式的最后一行,然后再将其复制下来。