相信大家在平时工作中也会经常用到SUMIFS函数来进行多条件求和,对此函数的参数我就不再过多的叙述,今天我们来看如何实现根据条件自动选择求和区域,来得到我们想要的数据。
需求:选择不同的产品和日期,求和得到对应的出货数量
首先,我来试着写出SUMIFS写出求和公式如下
=SUMIFS(F:F,A:A,D24,B:B,"出货*")
对于SUMIFS 函数,除第一个参数以外的其他参数相对于来说比较容易,那我们就来攻克第一个参数。
通过分析2月8日对应的是F列,如果用数字表达就是第6列。
我们可以通过MATCH函数来实现查找。
MATCH函数说明:返回指定数值在指定数组区域中的位置
公式:=MATCH(E23,1:1,0)
通过函数MATCH找到对应的列数以后,我们需要实现F:F这样的格式。
这时我们需要用到ADDRESS函数
ADDRESS函数说明:按照给定的行号和列标,建立文本类型的单元格地址引用。
公式:=ADDRESS(1,MATCH(E23,1:1,0),4)
通过如上公式我们得到了F1
我想大家应该想到了怎样把F后面的这个1给去掉,用LEFT,MID,SUBSTITUTE等函数都可以,这里我推荐用SUBSTITUTE
SUBSTITUTE函数说明: 在文本字符串中用 new_text 替代 old_text
公式:=SUBSTITUTE(ADDRESS(1,MATCH(E23,1:1,0),4),1,"")
我们用空字符串来替换1就达到了我们的目的。
下面我们还要拼接字符串也就是用&来拼接来实现F:F
公式:=SUBSTITUTE(ADDRESS(1,MATCH(E23,1:1,0),4),1,"")&":"&SUBSTITUTE(ADDRESS(1,MATCH(E23,1:1,0),4),1,"")
这样就得到了我们想要的结果,但是我们带入到SUMIFS公式时却会出错
这是因为我们没有转化为单元格区域,上面的公式得到的F:F只是字符串类型,这时我们还需要用到一个函数INDIRECT
INDIRECT函数说明:返回由文本字符串指定的引用
公式:=SUMIFS(INDIRECT(SUBSTITUTE(ADDRESS(1,MATCH(E23,1:1,0),4),1,"")&":"&SUBSTITUTE(ADDRESS(1,MATCH(E23,1:1,0),4),1,"")),A:A,D24,B:B,"出货*")
,