欢迎转发和点一下“在看”,文末留言互动!
置顶公众号或设为星标及时接收更新不迷路
小伙伴们好,今天继续来和大家分享关于阈值的问题。这种问题在日常工作中非常常见,解决的方法也有很多种。今天借这道题目再次来重温一下经典的函数套路吧。
原题目是这样的:
题目要求当某个人的数量达到一定的数值后,所对应的日期是哪一天。
这是一个典型的阈值问题。随着被检测值不断地累加,达到一定的目标之后就返回一个特定的目标。
解决这类题目的关键就是如何实现被检测值的累加。可以考虑使用的函数有SUMIF函数、MMULT函数以及OFFSET函数。更多的信息可以参看帖子阀值问题我用MMULT、LOOKUP 和OFFSET函数写了仨公式,快来留言区写下你的答案吧!、一组阀值问题的常用处理技巧,好东西就是要拿出来分享的!和SUMIF函数和MMULT函数两种方法同证累计和值问题,值得你收藏!
下面我们就赶紧一起来看看如何解决今天的这道问题吧!
01
MMULT函数解决累计求和问题
在单元格H2中输入下列公式,三键确认后并向下拖曳即可。
=LOOKUP(G2,MMULT(--(ROW($1:$13)>=TRANSPOSE(ROW($1:$13))),(A$2:A$14=F2)*(C$2:C$14)),B$3:B$15)
MMULT函数最重要的用途之一就是累计求和。
ROW($1:$13)>=TRANSPOSE(ROW($1:$13))
这个公式是和MMULT函数配套使用的。它返回下面这个矩阵。
--(ROW($1:$13)>=TRANSPOSE(ROW($1:$13)))
减负运算后得到下面的结果。
(A$2:A$14=F2)*(C$2:C$14)
这部分是满足条件的求和区域数值
MMULT(--(ROW($1:$13)>=TRANSPOSE(ROW($1:$13))),(A$2:A$14=F2)*(C$2:C$14))
MMULT函数矩阵求和,结果为{100;100;400;400;900;900;1600;1600;1600;1600;1600;1600;1600},大家看看,这是不是“张三”数量累加的结果?
LOOKUP(G2,MMULT(--(ROW($1:$13)>=TRANSPOSE(ROW($1:$13))),(A$2:A$14=F2)*(C$2:C$14)),B$3:B$15)
最后LOOKUP函数返回正确答案。
02
SUMIFS函数解决累计求和问题
在单元格H2中输入下列公式,三键确认并向下拖曳即可。
=LOOKUP(,0/FREQUENCY(G2,SUMIFS(C:C,A:A,F2,B:B,"<="&B$2:B$14)),B$2:B$14)
SUMIFS函数多条件求和。使用SUMIFS函数有一个好处,就是可以不用考虑源数据中数据的排序问题。
SUMIFS(C:C,A:A,F2,B:B,"<="&B$2:B$14)
在有些极特殊的情况下,源数据的排列顺序发生改变,所用函数公式结果有可能会出错。而这里SUMIFS函数就没有这个问题。
SUMIFS函数返回的结果如下:{100;100;400;400;900;900;1600;1600;1600;1600;1600;1600;1600}。
FREQUENCY(G2,SUMIFS(C:C,A:A,F2,B:B,"<="&B$2:B$14))
利用FREQUENCY函数对G列的数据在SUMIFS函数的结果上计频。这部分返回下面的结果:{0;0;1;0;0;0;0;0;0;0;0;0;0;0},表示在累积到400的这一天时,达到题目所设定的要求。
LOOKUP(,0/FREQUENCY(G2,SUMIFS(C:C,A:A,F2,B:B,"<="&B$2:B$14)),B$2:B$14)
同样,最后由LOOKUP函数返回正确答案。
-END-