表亲们好啊,本日老祝和大家分享关于OFFSET函数的知识。
提及OFFSET函数,真的是像雾像雨又像风,从繁芜的数据汇总、到数据透视表再到高等动态图表,都离不开OFFSET函数的默默付出。
通过OFFSET函数,可以天生数据区域的动态引用,这个引用再作为半成品,通过后续的处理加工,就可以为图表和透视表供应动态的数据源、为其他函数天生特定的引用了。
首先,咱们说说这个函数的浸染,微软的帮助文件是这样描述的:
以指定的引用为参照系,通过给定偏移量返回新的引用。
瞧瞧,这么大略的几句话,让人家怎么能猜透你的心思嘛。
这个函数有5个参数:
第一个参数是基点
第二个参数是要偏移几行,正数向下,负数向上。
第三个参数是要偏移几列,正数向右,负数向左。
第四个参数是新引用几行。
第五个参数是新引用几列。
如果不该用第四个和第五个参数,新引用的区域便是和基点一样的大小。
如果利用下面这个公式:
=OFFSET(C3,4,2,4,3)
便是以C3为基点,向下偏移4行,向右偏移2列,新引用的行数是4行,新引用的列数是3列,终极得到对E7:G10单元格区域的引用。
当然,仅仅得到引用是没啥用途的,咱们的目的是把OFFSET函数得到的引用作为一个半成品,再通过其他方法进行再加工。
这么说还是有点抽象啊,再来一个形象一点的:
OFFSET函数就像是一个仇敌的小分队,从据点(C3)出动,顺着大路向南走4里(C7)
拐弯儿再向东2里,这时候就到马家河子(E7)了
仇敌队长说了,我要以马家河子(E7)这个地方开始,再盘踞一片地盘。
有多大呢?向南4里,向东3里。结果便是E7:G10单元格区域了。
大略认识了OFFSET函数,咱们再看看这个函数的一些范例运用。
1)行列转置
如下图,要将A2:D7单元格中多行多列的姓名,转换到一列中。
F2单元格公式为:
=OFFSET($A$2,(ROW(A1)-1)/4,MOD(ROW(A1)-1,4))&\"大众\"大众
OFFSET函数的基点为A2。
向下偏移的行数为(ROW(A1)-1)/4,这部分公式下拉时,可以得到从0开始,按0.25递增的序号,即0,0.25,0.5,0.75,1,1.25,1.5……OFFSET函数对带有小数的参数自动向下取整,向下偏移的行数依次为0 0 0 0 1 1 1 1 2 2 2 2……也便是公式每下拉四行,就从数据源中向下偏移一行。
向右偏移的列数为MOD(ROW(A1)-1,4),这部分公式下拉时,可以得到0 1 2 3 0 1 2 3……的循环序列序列,也便是公式每下拉一个行,就从数据源向右偏移一列,下拉到第五行时,偏移的列数又会从0开始。
偏移行数和偏移列数二者结合,终极形成1 2 3 4 2 2 3 4 3 2 3 4 ……这样的偏移办法。
2)打算指定区间的发卖额
如下图所示,要打算从1月份到指定月份的累计发卖额。
F4单元格公式为:
=SUM(OFFSET(B2,0,0,MATCH(F2,A2:A13,0)))
MATCH(F2,A2:A13,0)部分,先利用MATCH函数打算出F2单元格中的月份在A2:A13中的位置,结果为9.
OFFSET函数以B2单元格为基点,向下偏移0行,向右偏移0列,以MATCH函数的打算结果作为新引用的行数,终极得到B2:B10单元格区域的引用,再利用SUM函数打算这个区域中的总和,得到从1月份到指定月份的发卖总额。
3)打算最近7天的均匀销量
如下图所示,A列和B列是发卖流水记录,要打算出最近7天的均匀销量。
F4单元格公式为:
=AVERAGE(OFFSET(B1,COUNT(B:B),0,-7))
先利用COUNT函数,统计出B列的数值个数。
OFFSET函数以B1为基点,以COUNT的结果作为向下偏移的行数,也便是B列有多少个数值,就向下偏移多少行。
这时候就相称于到了B列数值的末了一行,给定的偏移列数是0,新引用的行数是-7,得到从B列数值的末了一行开始,再向上7行这样一个动态的区域。
如果B列的数值增加了,COUNT函数的计数结果就增加了,OFFSET函数的行偏移参数也就随之变革。
就相称于一竿子捅到底,然后来个烧鸡大窝脖儿,向上引用7行,以是得到的始终是末了7行的引用。
末了利用AVERAGE函数打算出这个引用区域中的均匀值。
4)打算筛选后的商品总价
如下图,是各食堂的采购记录,须要打算筛选后的商品总价。
G1单元格公式为:
=SUMPRODUCT(SUBTOTAL(3,OFFSET(A1,ROW(1:9),0))C2:C10D2:D10)
要打算筛选后的内容,首先须要判断单元格是不是处于显示状态。
先来看OFFSET(A1,ROW(1:9),0)部分,OFFSET函数以A1单元格为基点,向下偏移的行数是ROW(1:9)的打算结果,表示依次向下偏移1~9行,终极得到9个引用区域,每个单元格区域由一个单元格构成。
这里涉及到多维引用的知识点了,小伙伴们如果犯含糊,可以先收藏一下。
接下来利用SUBTOTAL函数对OFFSET函数得到的多个引用区域进行处理,第一参数利用3,表示利用COUNTA函数的打算规则,即依次统计A2~A9这九个单元格区域中的不为空的单元格个数。
如果单元格处于显示状态,则对这个单元格的统计结果为1,否则统计结果为0。
这部分公式得到类似下面的效果:
{0;0;0;0;0;1;1;1;1}
再用SUBTOTAL函数的结果乘以C列的单价和D列的数量,如果单元格处于显示状态,则相称于1数量单价,否则相称于0数量单价。
末了利用SUMPRODUCT函数对乘积进行求和,这样就得到筛选后的商品总价了。
除了以上常规的用法,OFFSET函数还常常用于动态图表的制作,这些内容咱们往后连续分享。
好了,本日的内容便是这些吧,后半部分对付很多小伙伴来说可能有点难了,不过不用担心,咱们可以先收藏,然后逐步消化,集腋成裘循规蹈矩。
祝各位小伙伴一天好心情!
图文制作:祝洪忠