答案1
如果您可以选择取消合并 A 列中的单元格并对其进行规范化,那么简单的方法SUMIFS
应该可以奏效。否则,请尝试以下方法:
=SUMPRODUCT($C$2:$C$13,
1*($B$2:$B$13=$A16),
1*(ROW($A$2:$A$13)>=SMALL(ROW($A$2:$A$13)+100*($A$2:$A$13=""),B$15)),
1*(ROW($A$2:$A$13)<SMALL(ROW($A$2:$A$13)+100*($A$2:$A$13=""),B$15+1)))
结果:
╔════════╦════╦════╗
║ Day ║ 1 ║ 2 ║
╠════════╬════╬════╣
║ Apple ║ 60 ║ 90 ║
║ Orange ║ 0 ║ 85 ║
║ Pear ║ 75 ║ 0 ║
╚════════╩════╩════╝
来源:
修改了公式找到这里:
解释:
核心部分是SMALL
函数
SMALL(ROW($A$2:$A$13)+100*($A$2:$A$13=""),B$15)
它为指定范围创建一个行号数组,其中不包含任何内容的单元格 ( =""
) 的值比相应的行号 ( +100*
) 多 100。另一方面,不满足条件的单元格(即非空白单元格)将仅分配其行号。此数组作为第二个参数传递给函数SMALL
,B$15
告诉它获取第k个数组中最小的项目。
因此,我们要对以日期编号开头的行求和,这就是此部分的作用:
1*(ROW($A$2:$A$13)>=SMALL(ROW($A$2:$A$13)+100*($A$2:$A$13=""),B$15))
但是,我们还希望将总计限制在下一个非空白单元格正上方的单元格内;因此,<
运算符和B$15+1
(即第 (k+1)最小项)在以下部分中:
1*(ROW($A$2:$A$13)<SMALL(ROW($A$2:$A$13)+100*($A$2:$A$13=""),B$15+1))