分享

OFFSET进阶案例,最后一个直接看不懂!

 Excel办公实战 2021-06-29

OFFSET函数可以挖掘的空间太大了,之前我们已经写过几篇,同时分享了一篇关于参数数组化的文章,今天我们结合其他函数再来进一步深入学习一下!

“跑马圈地”形容OFFSET再形象不过,后四个参数,行列移动-“跑马”,还可以指定移动需要的高度和宽度,这不就是“圈地”吗?

后面的内容略有难度,若看的过程中,有不适,请及时加上收藏夹“吃灰”,来日巩固基础后再战!

我们先从稍微简单的来说,比如逆序内容

案例1 | 逆序内容

=OFFSET(A$13,13-ROW(A13),)

解析说明

OFFSET第三参数为偏移行,正数向下,负数向上,A13是12月的位置,13-ROW(A13),下拉会变成,0,-1,-2……-11,相对于从A13内容依次向上取!

本文由“壹伴编辑器”提供技术支持

我们稍微加大点难度,我们上面逆序了内容,那么可以逆序累计吗?

案例2 | 逆序累计求和

=SUM(OFFSET($B$13,,,-ROW(A1)))

解析说明

OFFSET第四参数表示需要的结果的高度,同时正数向下,负数向上,

-ROW(A1)下拉,依次表示-1,-2,-3……区域逐步扩大!

逆序求和我们说完,正序大家肯定更没有问题了,但其实没有什么难度,说好的加大难度呢?我们想要的是“内存数组”!

内存数组的逆序累计

▼ 数组公式,非365版本,三键录入

=SUBTOTAL(9,OFFSET($B$13,,,-ROW($1:$12)))

解析说明

1、OFFSET一个参数数组化后形成三维引用,SUBTOTAL可以对多维引用进行求和!

2、SUBTOTAL要求参数是ref(也就是引用类型即可),第一参数9表示求和

具体SUBTOTAL可以看此专题教程:SUBTOTAL专题教程

3、结果是一个内存数组,也就是说,可以二次计算,比如INDEX获取元素!

下面我们就针对上面的内容数组,继续处理,现在要求出最后几个月累计销售达到50的月份?

最近累计销售达到30的月份

▼数组请“三键”

=INDEX($A$2:$A$13,MAX(IF(SUBTOTAL(9,OFFSET($B$13,,,-ROW($1:$12)))>30,13-ROW(1:12))))

解析说明

1、公式虽然看上去很长,但是其实核心部分我们在上面就分析过了

SUBTOTAL对应的结果是一个内存数组,所以我们可以和其他元素比较

2、如果对应的累计值满足条件,我们就让其返回对应的行号,注意是逆序,所以需要使用13-ROW(1:12)) = {12;11;10;9;8;7;6;5;4;3;2;1}

3、最后使用INDEX获取指定行号对应的月份即可!


本文由“壹伴编辑器”提供技术支持

下面我们来一个有趣点的案例,关于筛选的问题!比如筛选后的最后一个值是什么?

案例3 | 获取筛选后的最后一个内容

=INDEX(A:A,LOOKUP(1,0/(SUBTOTAL(3,OFFSET(A1,ROW(1:12),))=1),ROW(1:12))+1)

使用MATCH函数处理,可以简化一些:

=INDEX(A:A,MATCH(1,0/(SUBTOTAL(3,OFFSET(A1,ROW(1:12),))=1))+1)

▼ 动画演示效果

解析说明:整体有一点点难!

1、不管是我们第一个公式的LOOKUP还是第二个中的MATCH省略第三参数用法,要求参数升序!不管你怎么处理,他始终认为你是升序排序的!

返回的是小于等于查找值的最大值

2、我们把第二参使用 0/数组,得到的结果是错误值和0,LOOKUP会过滤掉类型不一致的数组,最后就剩下0,我们使用一个比0大的值1来查找,那么就会一直往下查,值得查找到和他相等的值,如果查找到最后一个还是没有那么返回最后一个值(最大),整体还是遵循“二分法”!

本文由“壹伴编辑器”提供技术支持

今天我们就先到这里,如果你今天的内容都能掌握,那么恭喜你,你至少有函数中级的水平了!

知识星球的老铁们请及时下载本文Excel附件进行练习巩固

    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多