ExcelTip.Net留存知识帖 ---【注:附件之前被网盘供应商清空后,现已修复-现已修复-现已修复为本地下载!】
现在位置:首页 > 我的酷贴 > 函数与公式 > 如何对一列中连续正数、负数分段求和?

如何对一列中连续正数、负数分段求和?

作者:绿色风 分类: 时间:2022-08-18 浏览:429
楼主
天南地北
Q:如何对一列中连续正数、负数分段求和?
如下图A1:A23中连续的正负数(已经用不同的底色表示)分段求和,效果如B列

 

A:在B1输入如下数组公式:

【公式一】(wjc2090742 提供)

  1. =INDEX(MMULT(TRANSPOSE(A$1:A$23),N(MMULT(N(ROW($1:$23)>COLUMN(A:W)),N(A$1:A$23*A$2:A$24<0))+1=COLUMN(A:W))),ROW())

【公式二】
  1. =SUM(OFFSET(A$1,,,SMALL(IF(A$1:A$23*A$2:A$24<0,ROW($1:$23),23),ROW())))-SUM(INDEX(B:B,IF(ROW()=1,4^8,1)):INDIRECT("r[-1]c",))

【公式三】
  1. =SUM(A$1:A$23*(MMULT(N(ROW($1:$23)>COLUMN(A:W)),N(A$1:A$23*A$2:A$24<0))+1=ROW()))
以上公式皆为数组公式
【公式解释】
公式三为公式一的简化,在此就不对公式一进行解释,下面就分别对公式二和公式三进行解释

公式二:核心部分SMALL(IF(A$1:A$23*A$2:A$24<0,ROW($1:$23),23),ROW()),作用是找到行分界点,然后返回分界点所在行,此例分界点为5,8,9,11,13,18,21,22,当不满足A$1:A$23*A$2:A$24<0时,返回23,也就是IF(A$1:A$23*A$2:A$24<0,ROW($1:$23),23)返回一个1列23行的数组为{23;23;23;23;5;23;23;8;9;23;11;23;13;23;23;23;23;18;23;23;21;22;23}
然后利用SMALL分别提取第1至第23大的分段点,也就是行号,再利用OFFSET的第四个参数Height 来返回对应的区域给SUM求和,例如第一段也就是从A1开始行高为5的区域求和。
公式的第二部分SUM(INDEX(B:B,IF(ROW()=1,4^8,1)):INDIRECT("r[-1]c",))主要是因为前面OFFSET从A1开始的累加求和,所以返回的结果要减去B列上面所有的和,为了防止循环引用,在此使用IF判断,当公式在第一行时候,INDEX(B:B,IF(ROW()=1,4^8,1)):INDIRECT("r[-1]c",)返回的是B65536:B65536(以2003版为例,也就是最大行),当公式拉至第二行时候INDEX(B:B,IF(ROW()=1,4^8,1)):INDIRECT("r[-1]c",)返回的是B1:B1,INDIRECT("r[-1]c",)表示所在列的上一行,由此实现分段累加。

公式三:利用MMULT数组构造功能,ROW($1:$23)>COLUMN(A:W)返回23行23列的二维数组,与23行的一维数组矩阵相乘,得到23行1列的一维数组,本例中MMULT(N(ROW($1:$23)>COLUMN(A:W)),N(A$1:A$23*A$2:A$24<0))计算结果为{0;0;0;0;0;1;1;1;2;3;3;4;4;5;5;5;5;5;6;6;6;7;8},然后+1,得到段数的累计{1;1;1;1;1;2;2;2;3;4;4;5;5;6;6;6;6;6;7;7;7;8;9},然后当这个等于1时求第一段的和,依次类推


如何对一列中连续正数、负数分段求和?(附件).rar
2楼
omnw
公式分析的很好,容易理解
3楼
CheryBTL
总结的很好,收藏学习~~~
4楼
水之歌
来学习MM函数      

免责声明

有感于原ExcelTip.Net留存知识的价值及部分知识具有的时间限定性因素, 经与ExcelTip.Net站长Apolloh商议并征得其同意, 现将原属ExcelTip.Net的知识帖采集资料于本站点进行展示, 供有需要的人士查询使用,也慰缅曾经的论坛时代。 所示各个帖子的原作者如对版权有异议, 可与本人沟通提出,或于本站点留言,我们会尽快处理。 在此,感谢ExcelTip.Net站长Apolloh的支持,感谢本站点所有人**绿色风(QQ:79664738)**的支持与奉献,特此鸣谢!
------本人网名**KevinChengCW(QQ:1210618015)**原ExcelTip.Net总版主之一

评论列表
sitemap