OFFSET函数,四个典型用法请收好

说起OFFSET函数,真的是像雾像雨又像风,从复杂的数据汇总、到数据透视表再到高级动态图表,都离不开OFFSET函数的默默付出。

通过OFFSET函数,可以生成数据区域的动态引用,这个引用再作为半成品,通过后续的处理加工,就可以为图表和透视表提供动态的数据源、为其他函数生成特定的引用了。

首先,咱们说说这个函数的作用,微软的帮助文件是这样描述的:

以指定的引用为参照系,通过给定偏移量返回新的引用。

瞧瞧,这么简单的几句话,让人家怎么能猜透你的心思嘛。

这个函数有5个参数:

第一个参数是基点

第二个参数是要偏移几行,正数向下,负数向上。

第三个参数是要偏移几列,正数向右,负数向左。

第四个参数是新引用几行。

第五个参数是新引用几列。

如果不使用第四个和第五个参数,新引用的区域就是和基点一样的大小。

如果使用下面这个公式:

=OFFSET(C3,4,2,4,3)

就是以C3为基点,向下偏移4行,向右偏移2列,新引用的行数是4行,新引用的列数是3列,最终得到对E7:G10单元格区域的引用。

当然,仅仅得到引用是没啥用处的,咱们的目的是把OFFSET函数得到的引用作为一个半成品,再通过其他方法进行再加工。

简单认识了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:C10*D2: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函数对乘积进行求和,这样就得到筛选后的商品总价了。

图文制作:祝洪忠

(0)

相关推荐

  • OFFSET函数,有点烧脑!

    行云里讲堂(ID:xingyunli2022) 践行终身学习,专注个人提升. 整理编辑:枏北 OFFSET函数以指定的引用为参照,通过给定偏移量得到新的引用. 返回的引用可以为一个单元格或单元格区域, ...

  • 谈恋爱不香吗?非要来学excel,佩服!

    你好,我是刘卓.欢迎来到我的公号,excel函数解析.明天就是520了,你是准备撒狗粮呢还是吃狗粮呢? 最让我感到意外的是,有个小伙伴说:"与找对象相比,更愿意成为excel大佬." ...

  • Excel应用大全 |如何计算插值?

    SIMPLE HEADLINE 插值法又称"内插法",主要包括线性插 值.抛物线插值和拉格朗日插值等.其中的线 性插值法是指使用连接两个已知量的直线,来 确定在这两个已知量之间的一 ...

  • 又一个强大的引用函数offset,高手必学。

    之前我们学过的引用函数有index,indirect,今天我们学另一个强大的引用函数offset.它的意思是以指定的引用为参照系,通过给定偏移量返回新的引用. -01- 函数说明 它的结构写法如下: ...

  • OFFSET函数不会用?四个典型用法帮到你

    说起OFFSET函数,真的是像雾像雨又像风,从复杂的数据汇总.到数据透视表再到高级动态图表,都离不开OFFSET函数的默默付出. 通过OFFSET函数,可以生成数据区域的动态引用,这个引用再作为半成品 ...

  • EXCEL函数SUMIF9个典型用法

    EXCEL函数SUMIF9个典型用法

  • 血管真的需要及时排毒清垃圾?别被忽悠了!这四个认识误区请收好

    不要轻信各类保健品的宣传. 血管里流淌的是血液,血液由血浆和悬浮于其中的血细胞组成. 你的血管里面有"垃圾.毒素",不及时清理,它们不断蓄积后会形成血栓堵塞血管,严重的能要命.这样 ...

  • OFFSET函数,常用套路请收好

    小伙伴们好啊,今天老祝和大家一起来学习OFFSET函数的常用套路. 1)行列转置 如下图,要将A2:D7单元格中多行多列的姓名,转换到一列中. F2单元格公式为: =OFFSET($A$2,(ROW( ...

  • Excel条件数据随机组合后重新统计求和,4套函数组合请收好!

    Excel情报局 Excel职场联盟 生产搬运分享Excel基础技能 Excel爱好者大本营 用1%的Excel基础搞定99%的职场问题 做一个超级实用的Excel公众号 Excel是门手艺玩转需要勇 ...

  • 新版十四经络穴位大全、400多个穴位一键查询,送给您!请收好!

    养生调理 专业技术 民间绝技 学习交流的最佳平台新补充多个遗漏穴位和经外奇穴,现共400余穴,都齐全了(点击即可)穴位查询B臂臑穴不容穴髀关穴百会穴百虫窝秉风穴步廊穴本神穴白环俞胞肓穴八邪穴八风穴C尺 ...

  • LOOKUP函数的九个典型用法

    大家好啊,今天咱们一起聊聊LOOKUP函数. 这个函数主要用于在查找范围中查询指定的查找值,并返回另一个范围中对应位置的值.该函数支持忽略空值.逻辑值和错误值来进行数据查询,几乎可以完成VLOOKUP ...

  • SUMIF函数,9种典型用法盘点

    SUMIF函数用于对区域中符合指定的单个条件的值求和.她只有3个参数: =SUMIF(条件区域,指定的条件,需要求和的区域) 如果省略求和区域,会将条件区域作为求和区域. SUMIF函数真的这么简单吗 ...

  • SUMPRODUCT函数的7个典型用法

    小伙伴们好啊,今天咱们一起来学习一下SUMPRODUCT函数的用法,这个函数从字面来理解,SUM是求和,PRODUCT是乘积.综合到一起,就是对各个数组参数计算乘积,并返回乘积之和. 啥是数组?咱们就 ...