乐于分享
好东西不私藏

推荐WPS一个很好用的函数:SheetsName

推荐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!