excel函数技巧:reduce+数组实现值的累积-趣帮office教程网

如图:B、C、D列为源数据,

1、C列的数据有0~0.3

2、D列在对应C列的单元格内加了“○”和“×”评价

黄色填充单元格内,应该设置什么函数?能统计出

0~0.1区间

0.11~0.15区间

0.16~0.2区间

0.2以上

“×”的个数有多少个?公式如下:

=REDUCE(VSTACK(0,0,0,0),C2:C38,LAMBDA(x,y,(OFFSET(y,,1)=$D$13)*(SEQUENCE(4)=LOOKUP(y,{0,0.11,0.16,0.2},{1,2,3,4})) x))

本例思路,问个数有多少个可以视为个数的累加题,而reduce函数本来就是处理累加值用的,当仁不让。

本公式的lambda计算体部分公式结构为:是否为“×”判断*是哪个数字判断 累加器

利用的是条件判断结果为真则返回1,为假则返回0这一特性以及数组函数结果同样为一个数组这一特性。实现累加。

是否为×判断:OFFSET(y,,1)=$D$13;返回true或者false

数组函数结果同样为一个数组:SEQUENCE(4)=LOOKUP(y,{0,0.11,0.16,0.2},{1,2,3,4}),返回一个由true或者false构成的数组,数组大小与sequence(4)相同。

是否为×判断*是哪个数字判断即(OFFSET(y,,1)=$D$13)*(SEQUENCE(4)=LOOKUP(y,{0,0.11,0.16,0.2},{1,2,3,4})),会先将true转变为1,将false转变为0,再进行数组计算,形成这种形式:0*{0;0;1;0},这样形式的计算。

数组相乘就会对0进行扩展,以no1为例,由于c列值不是“×”,所以得到false,即数字0,B列值0.122位于第二个区域{0;1;0;0},所以会拓展形成{0;0;0;0}*{0;1;0;0},得到结果{0;0;0;0}。也就是no1不符合要求,不会对累加器产生影响。

本例的另一个特色是赋予累加器初始值一个数组,与结果要求的加个区域计数汇总相对应,这样就实现了按位置返回结果。