上一篇文章,介绍的利用函数汇总各个工作表数据,还是比较简单的。
在实际工作中,我们经常要对每个月从系统导出的数据进行汇总统计(每个月一张工作表),此时,就需要根据具体的表格结构,来选择相应的函数,并创建个性化的计算公式。
下图就是一个例子。

原始数据是从系统导出的每个月的管理费用表,现在要求制作下图所示的汇总表。

这个问题的难点是:在各月数据表中,部门和费用是在一列中,这样看起来就比较复杂了。其实不尽然,仔细观察表格结构,我们可以通过A列是否为空,来判断B列的数据是部门名称,还是费用名称。
不过,针对此例子,每个月数据表的费用项目下面都是7个部门,因此可以使用OFFSET引用出每个费用的数据区域,再用VLOOKUP函数提取数据。
以总经办1月份的各项费用为例,各单元格公式如下:
单元格C3:
=IFERROR(VLOOKUP("*"&$A2,OFFSET(INDIRECT(C$1&"!B1"),MATCH($B3,INDIRECT(C$1&"!B2:B100"),0),,8,2),2,0),"")
单元格C4:
=IFERROR(VLOOKUP("*"&$A2,OFFSET(INDIRECT(C$1&"!B1"),MATCH($B4,INDIRECT(C$1&"!B2:B100"),0),,8,2),2,0),"")
单元格C5:
=IFERROR(VLOOKUP("*"&$A2,OFFSET(INDIRECT(C$1&"!B1"),MATCH($B5,INDIRECT(C$1&"!B2:B100"),0),,8,2),2,0),"")
单元格C6:
=IFERROR(VLOOKUP("*"&$A2,OFFSET(INDIRECT(C$1&"!B1"),MATCH($B6,INDIRECT(C$1&"!B2:B100"),0),,8,2),2,0),"")
单元格C7:
=IFERROR(VLOOKUP("*"&$A2,OFFSET(INDIRECT(C$1&"!B1"),MATCH($B7,INDIRECT(C$1&"!B2:B100"),0),,8,2),2,0),"")
单元格C8:
=IFERROR(VLOOKUP("*"&$A2,OFFSET(INDIRECT(C$1&"!B1"),MATCH($B8,INDIRECT(C$1&"!B2:B100"),0),,8,2),2,0),"")
单元格C9:
=IFERROR(VLOOKUP("*"&$A2,OFFSET(INDIRECT(C$1&"!B1"),MATCH($B9,INDIRECT(C$1&"!B2:B100"),0),,8,2),2,0),"")
单元格C10:
=IFERROR(VLOOKUP("*"&$A2,OFFSET(INDIRECT(C$1&"!B1"),MATCH($B10,INDIRECT(C$1&"!B2:B100"),0),,8,2),2,0),"")
单元格C11:
=IFERROR(VLOOKUP("*"&$A2,OFFSET(INDIRECT(C$1&"!B1"),MATCH($B11,INDIRECT(C$1&"!B2:B100"),0),,8,2),2,0),"")
其他各个部门的公式可以复制得到。
公式看起来比较复杂,但核心是使用OFFSET函数获取每个费用下的数据区域,以及使用INDIRECT函数间接引用各个工作表,而查找数据的具体工作,就交给VLOOKUP函数来完成了。
----------------
(未完待续)
-----------------
1、数据合并系列文章
---------------
2、VBA制作明细表参考文章
---------------
3、函数公式精选文章

