推荐WPS一个很好用的函数:SheetsName
HI,大家好,我是星光
。
今天给大家分享的表格内容是一个函数。这个函数目前是WPS所独有的,叫做SheetsName。Sheets是工作表们的意思,Name是名字,所以这个函数常用于获取当前工作簿内工作表的名称。
获取工作表的名称之后,又有两个典型的应用场景,一个是创建带超链接的工作表目录,另外一个是筛选包含指定关键字的工作表,并将其数据合并成一张总表~
创建带超链接的工作表目录…▼

筛选并合并名称带”月”字的工作表的数据…▼
……
1,基本语法
打个响指,在分享这两个案例之前,照例还是看下该函数的基本语法:
=SHEETSNAME([单元格引用],[行列方向],[是否包含公式所在工作表])
一共有三个参数,都是可选的,如果所有参数都不选,返回结果是一个横向水平的数组,包含当前工作簿内所有工作表的名称(不含隐藏工作表)
=SHEETSNAME()

如果你不想让结果躺平,你想让它站起来,你可以将第2参数设置为1。1表示返回一个纵向垂直数组,按行展开工作表名称。
=SHEETSNAME(,1)

如果你不但想让结果站起来,你还想把结果的头去掉
去掉首个工作表的名称,那也不是不行,那可以将第3参数设置为1。1表示不包含公式所在工作表的名称。
=SHEETSNAME(,1,1)

这里做个严肃的补充说明
,第3参数干的并不是砍头的买卖。它不是一定会去掉首个工作表的名称,而是去掉公式所在工作表的名称。因此,如果公式不是写在第1张工作表内,也就不具有砍头的效果。
Fuck head▼
……
最后再解释一下第1参数。它的作用是返回指定单元格的所属工作表名称。例如,以下公式所引用的单元格为 看见星光!A1 ,因此它返回的工作表名称是:看见星光
=SHEETSNAME(看见星光!A1)
同理,以下公式引用的单元格为A1,省略了工作表名称,即返回公式所在工作表的名称。
=SHEETSNAME(A1)
……
⏫以上是基础语法
⏬以下是两个典型的应用案例。
2,创建带超链接的工作表目录
在目录性质的工作表的A2单元格,输入以下公式,向下复制填充,直至公式结果返回空白,可以快速创建一个带超链接的工作表目录。

=LET(_n,INDEX(SHEETSNAME(,,1),ROW(A1)),IFERROR(HYPERLINK("#'"&_n&"'!a1",_n&REPT(" ",50)),""))
公式首先定义了一个名称为_n的变量,它先使用sheetsname函数获取所有工作表的名称列表(不含隐藏工作表和公式所在工作表),再使用index函数按顺序把工作表名称提取出来。
然后使用hyperlink函数创建超链接。
hyperlink函数的第1参数为“#'”&_n&“‘!a1”,#表示当前工作簿,工作表名称前后加了单引号,是避免名称里有特殊字符导致链接失败。
第2参数为_n&REPT(” “,50),这是超链接显示的名字。一般来说,直接写_n也可以,我这里加了rept(空格,50),也就是在工作表名称后面加了50个空格。这样做的好处是,数据可以将单元格完完全全填满,鼠标不用必须点击工作表名称,点击单元格看似空白的地方也可以跳转到目标工作表。
3,筛选合并多个工作表的数据
假设有一个工作簿,包含了n张工作表,需要将其中包含关键字”月“的工作表的数据合并成一张总表。这类工作表的数据结构相同,换句话说,它们的字段(每列数据)的排列顺序一致,如下图所示:

在总表的A2单元格输入以下动态数组公式,计算结果会自动溢出到相邻区域:
=LET(_key,"月",_rngads,"!a2:d500",_lst,FILTER(SHEETSNAME(,,1),ISNUMBER(FIND(_key,SHEETSNAME(,,1)))),_data,DROP(REDUCE("",_lst,LAMBDA(_s,_d,VSTACK(_s,INDIRECT("'"&_d&"'"&_rngads)))),1),_res,FILTER(_data,BYROW(_data,COUNTA)>0),_res)

摊手,公式比较比较比较比较比较长亿点。
如果你是函数新人,只想吃鸡蛋不想开养鸡场,那公式直接拿去复制套用就可以了,你可能需要修改的有以下两个地方:
第2行代码定义了一个名称为_key的变量,表示工作表名称中包含的关键字,本例内容为”月”,可以根据实际需要修改成其它内容,例如”付款”。如果不是根据关键字筛选工作表,而是合并当前工作簿所有工作表的数据,可以把它设置为假空””。
第3行代码定义了一个名称为_rngads的变量,内容是需要合并工作表的单元格范围,本例为a2:d500,你也可以根据实际需要修改成其它内容,例如a2:g3000等。
……
以下是养鸡场的内容。
第4行代码定义了一个变量_lst,内容是筛选包含指定关键字的工作表名称列表。其中sheetsname函数的第3参数设置为1,这是为了当筛选关键字为空时,可以剔除公式所在工作表,避免计算错误。
第5行代码使用reduce函数迭代变量_lst内的每个工作表名称,其中使用indirect函数将对应工作表的单元格地址转换为实际单元格引用,将数据不断堆叠到结果数组中——这部分内容的详细解释,可以阅读往期推文 ▷ R E D U C E
第6行代码使用filter函数筛选剔除结果数组中整行为空白的记录。
……
两个例子举完了
那就盖木欧瓦吧,有啥不明白的地方照例可以在会员微信答疑群中提问交流。挥挥手,下期再见。
⏩需要系统学习Excel,却找不到优质教程?学习Excel的过程中遇到疑难问题,却找不到人及时作出解答?
加入我的付费社群,学习+训练+答疑,与6000+在线会员一起,同微软最有价值专家MVP同行,全面精进Excel之道
🚂>>~
加入我的付费会员,全面学习Excel
透视表 函数 图表 VBA PQ想学啥学啥
👀
本文由公众号“Excel星球”首发。
点击阅读原文系统学习Excel!
夜雨聆风


