利用VBA和INDIRECT 函数实现若干工作表中指定单元格数据的分类汇总
刘璐(湖北省襄阳市谷城县审计局)
【发布时间:2016年08月10日】
字号:【大】 【中】 【小】

近日,在协助财政审计科部门预算执行审计中遇到这样的问题:根据审计需要收集了若干单位的部门预算和批复表,表格数量多,当需要查看某一个部门的收入支出数据时很不方便直观。那么能不能有一张汇总表可以显示所有预算部门的收入和支出明细,并分类汇总呢?带着这样的疑问,我开始了这次的探索之路。

一、理清结构,建立汇总表的大概框架

1、查看了所有电子表格,发现所有的部门批复表都具有相同的表结构,只是填充的数据不同。

2、将所有部门的表格汇总到一个电子表格,工作表按单位命名,并建立汇总表的初步结构。(表头可以利用电子表格的转置功能)

二、数据引用

1、开始第一行数据的引用数据。

2、利用拖曳功能完成填充

问题出来了,拖曳还是在第一个工作表中引用数据,那么如何利用拖曳功能完成所有工作表的相对引用呢?

3、利用函数引用数据

这里我们需要利用INDIRECT 函数来完成跨工作表的相对引用,单元格A3的公式修改为INDIRECT("Sheet"&ROW(B1)&"!A3"),表示从表格中的第一个工作表中引用A3单元格的数据。

但是我们之前把所有单位汇总时,工作表名为了区分都按单位命名,INDIRECT函数在引用时根本找不到sheet1这个工作表,怎么办呢?需要再把工作表名一个一个修改成sheet1、sheet2、sheet3···吗?70多张表啊,工作量也是很大的。

4、VBA编写语句完成工作表名的批量修改。

在当前工作表中按快捷键Alt+F11,打开VBA编辑器,在右侧的代码窗口中输入下列代码:

Sub Macro1()

Dim i As Integer

For i = 2 To Worksheets.Count

Worksheets(i).Name = "Sheet" & i - 1

Next

End Sub

表示从第二个工作表开始,工作表依次修改为sheet1、sheet2、sheet3···直至最后一张工作表。

运行后,除了第一张工作表名是“总表”,其他工作表按次序已修改完成。

5、完成其他单元格的函数公式

把第三行的单元格公式都利用indirect函数完成修改后,选中第三行有数据的单元格利用鼠标的拖曳功能完成所有数据的相对引用,这样在总表中引用了其他所有工作表中指定单元格中的数据,大大提高了工作效率。

最后,为方便查看工作表名对应的单位名称,可以在A列之前插入一列“表名”,用sheet+数字来命名。

总结:前期的基础表结构需要一致,工作表名命名需要有规律性,后期工作相对轻松,可以插入增加的工作表,然后在总表将公式拖曳即可得到新增的单位数据,可以做成通用版本供以后使用。(刘璐)

【关闭】    【打印】