offset是查找引用函数,indirect函数也是引用函数,但区别在于offset函数是给定参照值并设定偏移量来进行引用,结果可以是单个值也可以是一个数组;indirect函数是返回文本字符串所指向的单元格或单元格区域引用。
关于offset函数的应用和参数详解,作者在《》中作了细致介绍。
这里我们着重讲讲indirect函数的应用。
indirect函数的表达式为:=indirect(文本,引用样式)
两个参数,第一个参数是文本字符串,通常是单元格地址,如A1,"A1"等,这里不带引号的A1表示引用A1单元格内容所指向的数据,带双引号的"A1"则表示引用A1单元格的数据;
第二个参数引用样式,就是公式的两种引用样式,也可以说是单元格地址的显示样式,这个参数可以省略,默认为A1样式。
我们回到上面的公式中,INDIRECT(A2&"!a:a")的含义是什么?
我们又要来弄懂A2&"!a:a"所表达的含义……
A2单元格的内容是”装饰纪念品“,而装饰纪念品又是一个工作表的名称,那么它的完整结果就是“装饰纪念品!a:a”,是不是似曾相似呢!
它其实就是跨表引用的单元格区域显示形式,表示装饰纪念品工作表中的A列数据区域。
我们套上indirect函数,即表示引用装饰纪念品工作表中的A列数据,它的值是一个数组,包含A列所有的数据。
那么COUNTA(INDIRECT(A2&"!a:a"))-1,则是计算引用区域中非空单元格的个数,它的作用是为了引用该工作表中所有的产品子类名称。
通过offset函数的引用,能计算得出指定各工作表下的所有产品子类名称。这样便得到了一个可任意点击选择的二级下拉列表。
之后在一次设置开始时间和结束时间的动态下拉列表,方法步骤与上同。
最后,我们进入汇总统计的主题,仍然是通过一个组合嵌套的函数,来进行求和计算。
从上图编辑栏中的公式可以看出,它带有大括号,属于一个数组公式,嵌套了sum函数、offset函数、match函数、indirect函数,各函数各有其用。
indirect函数来引用产品大类的跨表单元格区域,match函数用来返回产品子类在跨表单元格区域中的位置,offset函数则可以引用设定偏移位置的数值计算区域,最后sum函数来求和计算区域的数值。
四者一组合,便得到了跨表的多条件求和结果。
我们来看看这个公式的各参数结果,如下图所示: