Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 计算下一次发生的单元格数_Excel_Vba - Fatal编程技术网

Excel 计算下一次发生的单元格数

Excel 计算下一次发生的单元格数,excel,vba,Excel,Vba,我有一长串大约5000件物品的清单。每个项目都标有一个介于1-5之间的数字。此列表中的第一项是1。我想确定每一次都有一个1,然后计算有多少个细胞跟随它,直到有另一个1。然后,我想对与每个单元格相关联的值求和,以找到标记为1的每个单元格的“总数” 假设我的表如下所示(我们将查看第3列): 在A行中,总和为A-E的和,130。 在F行中,总和为F-I的和,120 我需要回答的唯一部分是,在这种情况下,从A-E计算行数的语法是什么 谢谢 我认为最简单的方法是在单元格D1中输入以下公式: =IF(C1=

我有一长串大约5000件物品的清单。每个项目都标有一个介于1-5之间的数字。此列表中的第一项是1。我想确定每一次都有一个1,然后计算有多少个细胞跟随它,直到有另一个1。然后,我想对与每个单元格相关联的值求和,以找到标记为1的每个单元格的“总数”

假设我的表如下所示(我们将查看第3列):

在A行中,总和为A-E的和,130。 在F行中,总和为F-I的和,120

我需要回答的唯一部分是,在这种情况下,从A-E计算行数的语法是什么


谢谢

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

=IF(C1=1,SUM(OFFSET(A1,0,0,MATCH(1,C2:$C$10,0))),"")
(显然,将
$C$10
更新到数据集的末尾)并将其向下拖动

基本上,你的意思是:

  • 如果列C的值为1,则:
    • 从我的行开始,一直向下取A列的和,直到与下一个
      1
  • 或者返回
这取决于以下事实:
Match()
函数在第一次找到匹配项时将返回,因此它直接从您的匹配项后面的行开始(
C2
,并继续查找
1
的下一个值,直到数据集的底部-在本例中,
$C$10


希望这是有道理的,并做到这一点

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

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

=IF(C1=1,SUM(A1:INDEX(A2:$A$9999,MATCH(1,C2:$C$9999,0)-1)),"")
为确保公式的最后一个结果正确,请在同一列中源数据下方的行(“C”)中添加一个“1”值

注意:如果要使用范围大于当前数据集的偏移变化,也需要此选项。否则,这两个公式将找不到最终的“1”,并返回#N/a

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

=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))),"")

如果源数据的数据范围不是固定的,则在进一步向下复制公式之前,需要操作公式的最后一行

我不知道
OFFSET()
导致重新计算的问题。。。确定+1!!:)
=IF(C10=1,SUM(OFFSET(A10,0,0,MATCH(1,C$10:$C11,0))),"")