表名再多也不怕!一条公式提取所有工作表名

你好,我是刘卓。欢迎来到我的公号,excel函数解析。今天要和你分享的函数是get.workbook,它可以获取工作簿的一些信息,比如工作簿的所有工作表名,选择的工作表名,活动工作表名等。
-01-

函数说明

get.workbook返回工作簿的一些信息,语法如下,有2个参数:

GET.WORKBOOK(type_num, name_text)

第1参数type_num:代表信息类型的一个数字,有多种类型。常用的有1,3,38。更多的类型参考文件的sheet2。

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

-02-

示例解释

这3种常用的类型代表的意思如下图所示:
由于第2参数省略,默认是当前工作簿。get.workbook(1)返回所有工作表名,get.workbook(3)返回选择的工作表名,get.workbook(38)返回活动工作表名。
知道了它们代表的意思,但还看不到它们的结果。下面就演示一下:
因为get.workbook是宏表函数,所以先要定义名称。点【公式】-【定义名称】,在名称中输入allbm,引用位置输入公式:=GET.WORKBOOK(1)&T(NOW()),点确定。
然后在单元格中输入公式=allbm,确定。再在编辑栏选中公式(抹黑状态)按F9查看结果,可以看到以数组的形式返回所有工作表名,前面包括工作簿名。数组的元素以逗号分隔,所以是水平数组。
下面再来看下get.workbook(3)返回的结果,定义的名称为sebm,公式为=GET.WORKBOOK(3)&T(NOW())。定义的步骤和上面一样,不再重复说明。
在“财务部“的任意单元格中输入公式=sebm,返回的结果只有财务部的表名。当选择的表名有多个时,它也会以水平数组的方式返回多个所选的表名。

-03-
具体应用

1.提取所有工作表名

提取出所有工作表名,但不包含工作簿名,如下图所示。有了get.workbook(1)的结果,提取出工作表名就简单了。可以将工作簿名替换掉,也可以将工作表名提取出来。

这里是将工作表名提取出来,公式为:

=IFERROR(INDEX(MID(allbm,FIND("]",allbm)+1,99),ROW(A1)),"")

首先用find找到右中括号"]"的位置,然后用mid从右中括号"]"的后面1位开始提取,提取的长度是99。这样就把工作表名提取出来了。

MID(allbm,FIND("]",allbm)+1,99)返回的结果为{"Sheet1","Sheet2","财务部","行政部","技术部","客服部","培训部","人事部","生产部","市场部","销售部","信息部"}。还是一个数组。

接下来就用index从这个数组中提取第1个表名,第2个表名。。。一直提取完。当所有的表名都被提完后,公式再下拉,就会出错,所以最后用iferror来处理错误值。

如果你对上面的数组公式不理解,也可以用下面的公式:

=IFERROR(MID(INDEX(allbm,ROW(A1)),FIND("]",INDEX(allbm,ROW(A1)))+1,99),"")

首先用index将allbm的每个元素提取出来,它既包含工作簿名,又包含工作表名。然后再从中提取出工作表名。如下图所示。
最后要另存为启用宏的工作簿,后缀名为.xlsm。
提取出工作表名,后续还可以制作可跳转的目录。

链接:

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

提取码:xm0b
(0)

相关推荐