HI,大家好,我是星光。
今天给大家分享的表格内容是一个函数。这个函数目前是WPS所独有的,名字叫做SheetsName。Sheets是工作表们的意思,Name是名字,所以这个函数常用于获取当前工作簿内工作表的名称。
获取工作表的名称之后,又有两个典型的应用场景,一个是创建带超链接的工作表目录,另外一个是筛选包含指定关键字的工作表,将数据合并成一张总表~
创建带超链接的工作表目录...▼
筛选并合并名称带"月"字的工作表的数据...▼
……
1,基本语法
哒,打个响指,在分享这两个案例之前,照例还是看下该函数的基本语法:
=SHEETSNAME(
[单元格引用],
[行列方向],
[是否包含公式所在工作表]
)
一共有三个参数,都是可选的,如果所有参数都不选,返回结果是一个横向水平的数组,包含当前工作簿内所有工作表的名称(不含隐藏工作表)
=SHEETSNAME()
如果你不想让结果躺平,你想让结果站起来,你可以将第2参数设置为1。1表示返回一个纵向垂直数组,按行展开工作表名称。
=SHEETSNAME(,1)
如果你不但想让结果站起来,你还想把结果的头去掉去掉首个工作表的名称,那也不是不行,那可以将第3参数设置为1。1表示不包含公式所在工作表的名称。
=SHEETSNAME(,1,1)
这里做个严肃的说明,第3参数干的并不是砍头的买卖。它不是一定会去掉首个工作表的名称,而是去掉公式所在工作表的名称。因此,如果公式不是写在第1张工作表内,也就不具有砍头的效果。
Fuck head▼
……
最后再解释一下第1参数。它的作用是返回指定单元格的所属工作表名称。例如,以下公式返回工作表名称:看见星光
=SHEETSNAME(看见星光!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!