Excel函数应用基础篇|查找与引用函数(六)乾坤大挪移OFFSET
小伙伴们,我们今天继续我们的查找引用函数系列。今天我们来聊聊有点邪的OFFSET函数,就像金庸先生的武侠小说里面的乾坤大挪移一样,掌握他的使用方法,就可以像张无忌一样功力大增,神功护体,独霸光明顶!OFFSET(reference,rows,cols,height,width)=OFFSET(基点,要偏移的行数,要偏移的列数,【引用后的行数】,【新引用后的列数】)Reference 作为偏移量参照系的引用区域。Reference 必须为对单元格或相连单元格区域的引用;否则,函数 OFFSET 返回错误值#VALUE!。Rows 相对于偏移量参照系的左上角单元格,上(下)偏移的行数。行数可为正数或负数,正数时,表示从基点向下偏移,负数表示向上偏移。Cols 相对于偏移量参照系的左上角单元格,左(右)偏移的列数。列数可为正数或负数,使用正数时,表示向右偏移,使用负数时表示向左偏移。如果行数和列数偏移量超出工作表边缘,函数 OFFSET 返回错误值#REF!。如果省略 height 或 width,则假设其高度或宽度与 reference 相同。函数 OFFSET 实际上并不移动任何单元格或更改选定区域,它只是返回一个引用。函数 OFFSET 可用于任何需要将引用作为参数的函数,如SUMIF,SUMIFS,COUNTIF,COUNTIFS,SUBTOTAL等。看着函数说明是不是有点蒙圈,没关系,懵是正常的,懵的不正常就是清醒。下面我们就根据函数说明和需要注意的事项用实例来一招一招破解乾坤大挪移。实例1.
单元格区域A3:A5 B4:B6作为OFFSET的第一个参数,因为引用区域不是连续单元格,返回错误。=OFFSET((A3:A5,B4:B6),4,3)实例2.
=OFFSET(B2,1,0),列不偏移,写成0,或者省略0,用逗号站位。=OFFSET(B2,-1,0),这里行为负值,表示向上偏移。=OFFSET(B2,-2,0),因为偏移超出工作表边缘,出错。实例3.
=OFFSET(B2,,1)因为行不偏移,所以第二个参数写成0,或不写,用逗号站位,但是不能省略逗号。=OFFSET(B2,,-2)因为偏移超出工作表边缘,出错。实例4.
实例5.
=OFFSET(B2,5,2,5),这里省略第5参数,也可以不省略,写成1,表示和基点的宽度一样,也可以用逗号站位,但是要注意的是,有逗号站位省略的是1,不是0.实例6.
B2单元格向下偏移5行,向右偏移2列,高度不变,宽度5实例7.
B2单元格向下偏移14行,向右偏移2列,高度5,宽度5综合实例运用
数据累加
A2:A21是一列数据,然后要分别求出每一步的累加值。也就是A1,A1+A2+A3,A1+A2+A3+A4......公式=SUMIF(OFFSET(A2,,,ROW(1:20)),">0")这个函数对新手来说,就有点不友好了,牵扯到数组运算和多维引用了。简单介绍一下。我们前面讲过,SUMIF的第一个参数是RANGE,是引用,OFFSET函数返回的就是单元格引用,可以直接作为SUMIF的第一个参数。这里最难理解的就是OFFSET的第5个参数,ROW(1:20)。刚才我们说过,第5个参数是高度,ROW(1:20)产生一个数列,1到20,作为OFFSET的第5个参数,返回20个单元格引用区域,这是看不到的,是多维引用,而SUMIF函数可以处理多维引用,巧妙的达到了累加的效果。今天正好说到累加,简单介绍一个365新函数,是真香!SCAN函数用于扫描数组中的每一个元素,并保留每一步的计算结果,返回与源数组同宽同高的数组。初始值:可选参数,如果省略(需要用逗号占位)则以数组中的第一个值为初始值。SCAN函数一次只支持处理一个数组。LAMBDA函数参数有2个,第1个是累加器,第2个代表数组中的每一个元素。SCAN函数会将每一元素的计算结果保留,存入累加器中,并返回由每一步计算结果组成的数组。以前,没有出365新函数的时候,能在函数中做到循环运算是非常困难的,有的高手想了非常多的办法,有非常多的经典套路,我是做不到这一点的,功力还是有点低,向他们致敬!今天,有了十几个非常好用的365新函数,以前的套路都可以不用,直接达到想要的效果。不知道这是科技的进步,还是脑子的退化,怀念一分钟......简单介绍一下这里SCAN函数的原理,后面我们会聊到365新函数。=SCAN(0,A2:A21,LAMBDA(X,Y,X+Y))第二个参数A2:A21,SCAN函数要逐一扫描的数据区域。第三个参数。LAMBDA拉姆达函数。这个函数有两个参数,第一个是累加器,第二个是要逐一扫描数组的每一个元素,也就是循环扫描吧。也就是每一个元素和累加器相加,然后SCAN函数记录每次的累加器的值。最后形成和源数据一样大小的新数据区域。有什么不懂的,或遇到的工作中实际问题,打到评论区,让我们一起搞定他!