求前3个非空数字之和,你还能想出其他的方法吗?
小伙伴们,大家好。今天要分享的是一个条件求和的问题。先来看下数据源和求和的结果。如下图所示,A到G列是数据源,可以看做一个成绩表。现在要求的是前3个非空数字的和,结果在H列。比如苏妍春,前3个非空的数字分别是62,39,75,它们的和是176。
在H2单元格输入公式=SUMPRODUCT((SMALL((B2:G2="")/1%+COLUMN(B:G),{1;2;3})=COLUMN(B:G))*B2:G2),不用三键,向下填充,完成。
说下大概的思路:首先判断是否为空,不为空的返回对应的列号,为空的返回一个比较大的列号(100再加上列号)。然后从这些列号中提取最小的3个值就是前3个非空数字对应的列号,并且让它们形成一维纵向数组。接着再用它和这个区域的所有列号进行相等的比较,也就是一维纵向数组和一维横向数组的运算,最后再乘以对应的数字区域,然后求和就得到了前3个非空数字之和。
以苏妍春为例说明,=(B2:G2="")/1%+COLUMN(B:G)这部分返回的结果如下图第10行红色框所示,非空的单元格返回对应的列号,空单元格返回较大的列号。
=SMALL((B2:G2="")/1%+COLUMN(B:G),{1;2;3})这部分是从上一步的结果中取出3个最小的值,分别是2,4,5,结果如下图红色框所示。
=SMALL((B2:G2="")/1%+COLUMN(B:G),{1;2;3})=COLUMN(B:G)这部分就是用上一步small的结果和COLUMN(B:G)进行相等的比较,产生一个二维数组,返回的结果如下图③所示。①是small的结果,②是COLUMN(B:G)的结果。
=(SMALL((B2:G2="")/1%+COLUMN(B:G),{1;2;3})=COLUMN(B:G))*B2:G2这部分就是用上一步的结果和B2:G2相乘,得到的结果如下图红色框所示,这样就得到了前3个非空的数字,最后用sumproduct求和就可以了,而且用sumproduct不用按三键。
好了,今天的问题就分享到此,你也可以想想其他的方法,欢迎在留言区写出答案。
文件链接:
https://pan.baidu.com/s/1vW8QUE3kfvw-w7Nin53xAA
提取码:j94r