Hi,大家好,我是胖斯基
最近重温了一遍金庸武侠巨著,芸芸众生中有武侠大师,有凡夫俗子……
最为惊叹的还是那扫地神僧般的隐者,信手拈来,都是神兵利器,横扫千军……
然后有些人就开始YY了,仿佛自己若拿的手,也能一统江湖,殊不知,学的不精,也就是一棒槌,充其量也就一威风凛凛的装饰……
同样,在Excel中,也一样如此!
比如函数:INDIRECT,乍一看不明白什么意思,没事,翻译一下:间接的,不直截了当的……
可能更晕,还不如不看
于是乎
一把神兵利器就被你当做火烧棍给扔在了一边……
那Ta有什么用呢,看看我们财务人怎么玩?
一、检验表名是否有误
每逢月底,财务会向各部门或各分公司归集整理数据。So,下发一套标准的Excel表,里面设置好了表样和公式,填报人直接填写就可以了。
然后
总有一些别出心裁的人,把你Sheet表名给改动了,导致了你回收回来后,多个工作簿在汇总时,无法利用现有的模板公式去自动算数据
是不是有一种牙咬切齿的感觉?
那怎么做呢?
比如:我们看看下面的情况
上图中,下发的套表涵盖了几个页签,为了显示方便,我们做了一个【稽核】的页签,就是为了来检验Sheet表名是否进行了修改
我们设置一个公式后,就会自动判别Sheet表名是否修改
怎么样,是不是很直观,这样无论是填报人,还是数据汇总人,一看【稽核】的页签,就知道原表是否发生了人为的变化,这样避免了在数据汇总出错时反过来再来检查错误。
原理很简单,就是利用了INDIRECT函数,公式如下:
这里的重点是:INDIRECT(C5&"!A1"),C5里面的内容是其中一个页签的名称,所以C5&"!A1"就转化为了201809销售费用!A1,再利用INDIRECT来获取该单元格的内容。
那如果201809销售费用页签没有更改名字,那INDIRECT(C5&"!A1")是可以获取到内容(因为表存在),反之因为表不存在,则无法获取,会提示错误。那之后再配合ISERROR和IF函数,再做逻辑性的判断说明即可。
这里为什么要用INDIRECT呢?因为检验的是多张表,而每张表的表名不一样,所以为了保持公式的灵活度,需要获取表名的这个过程是个动态的,而为了把持这个动态,就不能直接去引用(这种方式是固定的),而需要间接去引用,而这个间接则就是利用INDIRECT。
可能还不太好理解,我们再看一个
二、跨表快速查询信息
招采部门在执行采购时,前期会有一个核价过程,核价完成后,会指定某个供应商,此时的采购清单里面每个物品涉及到不同供应商的报价,那如何简化操作呢?
比如供应商的报价是这样的:
你的采购清单是这样的
里面供应商列中,有不同的供应商,如果你采用采用最传统的模式,直接指定明确的表进行VLOOKUP时,没问题
比如第1行的公式:VLOOKUP(B2,供应商A!A:B,2,0),可以正确计算出结果,但是如果供应商现在换了呢?一个产品报价还好,如果涉及到多个产品报价的调整呢,再来大幅度修改VLOOKUP的公式,那可真就欲哭无泪了。
想想上面的例子,这里的查询是涉及到多个页签,不固定,那是否立马想到了采用INDIRECT来动态获取呢?
就像这样:
来观察一下其公式:
其固定和动态的的区别就在于INDIRECT,利用INDIRECT来获取不同表的内容,这样保障了公式的灵活性,无论选择那家供应商报价,基本无障碍。
这些都是最基本的,那再看看财务人常处理的多表合并的问题
三、多表快速合并总表
比如:每个月度都有一个销售业绩表,每季度或半年度的数据要统一汇总,如下所示
可能你会每张表逐次复制粘贴
可能你会逐次用"="的模式跨表连接
但是会存在一个问题,如果表的数量少,还能接受。但是表的数量多的话,那只能望山跑死马,做表做到吐
那问题还是这个问题,依旧涉及到多表的问题,并且还是动态,So,又该INDIRECT函数登场
公式:=INDIRECT(B$1&"!B"&ROW())
观察表头,这里表头列的名称和Sheet名称信息一致,故通过获取列头的名称来跨表进行数据提取,So,这里便用到了B$1&"!B",由于产品1到产品9是分布在每一行,所以这里用了一个ROW()函数来动态获取行,最终通过INDIRECT来合并处理,即可达到实现效果。
也许细心的你会发现,实际中,表格不会这么理想化,有的月份产品没有销售业绩,空行就直接忽略
那再用上面的公式则会出错(因为行不在统一),那如何处理呢?
依然还是刚才的思路,采用INDIRECT进行动态处理,此时由于要涉及到产品匹配问题,需要用INDEX MATCH
公式:=IFERROR(INDEX(INDIRECT(B$1&"!B:B"),MATCH($A2,INDIRECT(B$1&"!A:A"),0)),"-")
这里的核心还是INDIRECT,分别结合INDEX MATCH组合,其本质原理还是一样,这里就不做解释了,可以思考一下。
综上可知:
针对INDIRECT函数,其含义是:间接的,不直截了当的,即:再处理问题的时候,如果涉及到的是多页签,多表的情况下,可以采用INDIRECT动态模式,这样就简化了公式的处理,让表格更具弹性
你学会了吗?
更多精彩,敬请关注Excel老斯基
,