如图: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不符合要求,不会对累加器产生影响。
本例的另一个特色是赋予累加器初始值一个数组,与结果要求的加个区域计数汇总相对应,这样就实现了按位置返回结果。
评论 (0)