分享

提取工作表名,函数和vba代码哪个更方便?

 刘卓学EXCEL 2021-04-02

你好,我是刘卓。欢迎来到我的公号,excel函数解析。在工作中,我们有时需要提取出工作簿中所有分表的名字,以方便我们在总表中进行数据的汇总。而提取工作表名既可以用函数,也可以用vba代码。今天就来分享下这两种方法,看看你更喜欢哪一种?


下面的工作簿中,有好几个部门的分表,记录的是各部门员工的工资。现在的要求是在“总表”中汇总出各部门的总工资。比如“财务部”所有员工的总工资为21427,就在“总表”中汇总出来。


想要在总表”中汇总出各部门的总工资,必须先提取出各部门的名称,也就是提取出各分表的表名,然后才能计算出总工资。下面就来分享下提取工作表名的两种方法。

-01-

工作表函数


利用工作表函数提取工作表名,只能用宏表函数了。这里我们用get.workbook函数,它可以返回有关工作簿的一些信息。语法如下,有2个参数。
GET.WORKBOOK(type_num, name_text)
第1参数type_num:代表返回信息类型的一个数字,有多种类型。常用的有1,3,38。

第2参数name_text:打开的工作簿的名字。如果省略,默认为当前工作簿。通常是省略的。

get.workbook(1)以水平数组的方式返回当前工作簿的所有工作表名,每个工作表名分为两部分,前面是用中括号括起来的工作簿名,后面是工作表名。比如:"[2020.12.15   提取工作表名字,函数和vba代码大比拼.xlsm]财务部"。

宏表函数只能在定义名称中使用,所以先定义一个名称。点【公式】-【定义名称】,在名称中输入bm,引用位置输入公式:=GET.WORKBOOK(1)&T(NOW()),点确定。
然后在单元格中输入公式=bm,确定。再在编辑栏选中公式(抹黑状态)按F9查看结果,可以看到以数组的形式返回所有工作表名。数组的元素以逗号分隔,所以是水平数组。

得到了这些工作表名,就可以进行进一步的处理了。先把右中括号]后面的工作表名提取出来,得到了一个数组。然后再从这个数组中取出每个工作表名。具体的过程我就不详细说明了,下面直接给出公式。

在“总表”的A2单元格输入公式=IFERROR(INDEX(MID(bm,FIND("]",bm)+1,99),ROW(A2)),""),下拉填充。不理解这个公式的小可爱,可以回顾《表名再多也不怕!一条公式提取所有工作表名》这篇文章。



-02-

vba代码

下面来看下用vba代码提取工作表名的方法,只需点一下按钮就好。
它的代码如下,就是一个简单的for each...next循环。

对于提取工作表名,我个人还是更喜欢vba代码,感觉确实比函数省事,你更喜欢哪种方法呢?


-03-
汇总各部门工资

工作表名提取出来后,最后我们来汇总下各部门的工资。在“总表”的B2单元格输入公式=SUM(INDIRECT("'"&A2&"'!b:b")),下拉填充。
链接:

https://pan.baidu.com/s/1atx9ZB5Ztxd3959c0y8e5g

提取码:sd6y

    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多