什么Excel公式可以返回工作表名称?

26

我已搜索了Excel功能文档和一般的MSDN搜索,但未能找到在没有使用VBA的情况下返回工作表名称的方法。

有没有一种方法可以在Excel公式中获取工作表名称而不需要使用VBA?

9个回答

22

我不太擅长使用 Excel,但我在这里找到了这些


=MID(CELL("filename",A1),FIND("]",CELL("filename",A1))+1,256)

并且A1可以是工作表中的任何非错误单元格。
要获取工作表的完整路径和名称,请使用

=CELL("filename",A1)

如果此文件路径中的任何文件夹名称包含字符],则其无法正常工作。 - mielk
3
我认为我很聪明,因为我省去了“,A1”的部分,并将“256”改成了“255”,但这种方法有一个缺陷,如果在不同的工作表重新计算工作簿,它就不起作用了:在这种情况下,它的值始终是活动工作表的名称。 - cp.engr
非常有用,非常感谢。只是需要注意的是,您必须将文件保存在某个位置才能使其正常工作(不能是“Book 1”或其他名称)。 - Alex S
@AlexS 谢谢您的反馈!自从我发布这篇文章以来,我最初链接的资源似乎发生了很大的变化 - 感谢您确认它仍然有效。 - Travis

7

这是一个相对较短的例子,有一些额外的好处:

  • Does a reverse lookup (most other answers go wrong direction) by using the often ignored REPT function.

  • A1 seems like a poor choice as there's a considerably higher chance it errors compared to... $FZZ$999999.

  • Don't forget to absolute. Copying and pasting some of the other examples could error due to referential changes.

  • The ? is intentional as that shouldn't be in the file path.

    =SUBSTITUTE(RIGHT(SUBSTITUTE(CELL("Filename",$FZZ$999999), 
    "]",REPT("?", 999)), 999),"?","")
    

4

最近版本的Excel,公式语法为:

=MID(CELL("filename";A1);FIND("]";CELL("filename";A1))+1;255)

4

其他答案中给出的公式均不支持文件路径中包含字符]

下面的公式更为复杂,但可以正确处理这种情况:

 =MID(CELL("filename",A1),FIND("]",CELL("filename",A1),FIND("?",SUBSTITUTE(CELL("filename",A1),"\","?",LEN(CELL("filename",A1))-LEN(SUBSTITUTE(CELL("filename",A1),"\","")))))+1,LEN(CELL("filename",A1)))

4
以下代码将会分离出表格名称:
=RIGHT(CELL("filename"),LEN(CELL("filename"))-FIND("]",CELL("filename")))

2
如果从不同的工作表重新计算工作簿,则此方法无法正常工作:在这种情况下,其值始终为活动工作表的名称。 - feetwet
1
@feetwet 遇到了同样的问题,原因是 CELL("filename") 缺少可选参数,但在这种情况下需要引用参数。使用带有对工作簿中任何单元格的引用的单元格,“修复”了预期的行为:CELL("filename"; A1) - Kim

1

我已经打开了一个模块,所以我创建了一个自定义函数:

Public Function Sheetname (ByRef acell as Range) as string
Sheetname = acell.Parent.Name 
End Function 

1
看起来你的答案不完整。请演示它如何回答原始问题。另外,使用{}按钮将其格式化为代码。 - RaphaMex
2
这并没有回答 OP 的问题,因为他特别问道:“有没有一种方法可以在 Excel 公式中获取工作表名称 而不需要求助于 VBA?”,然而这是一个 VBA 的答案? - P-L
我会将其更改为 Sheetname = acell.Worksheet.Name - pgSystemTester

0

文件名中有一个方括号']',因此需要根据以下方式修改上述公式以查找方括号的最后一次出现。 验证了该方法适用于文件名/路径中0、1或多个方括号。

=RIGHT(CELL("filename"),LEN(CELL("filename")) - FIND("]]]",SUBSTITUTE(CELL("filename"),"]","]]]",LEN(CELL("filename"))-LEN(SUBSTITUTE(CELL("filename"),"]","")))))

1. 使用替换函数替换所有方括号,然后将结果的长度与文件名的长度进行比较,以确定文件名中方括号的数量。 2. 利用方括号的出现次数,将最后一个方括号替换为三个连续的方括号“]]]”。 3. 使用查找函数来识别字符串中三个方括号的位置。 4. 从完整路径的长度中减去三个方括号的位置,得出结果。 5. 利用该结果获取最右侧的字符(即工作表名称)。
上面的先前评论提到首先保存工作簿也很重要,否则你会收到 #Value! 的结果。

0
以下内容对我来说很有效,而且比其他解决方案更简单(至少对我来说),同时仍然处理文件名中的方括号:
=MID(CELL("filename", A1),6+SEARCH(".xlsx]",CELL("filename", A1)),32)

这里假设文件是“xlsx”格式,并且文件名不会包含“.xlsx]”以外的内容,这个假设在我的情况下是足够安全的。

如果你想处理“.xlsx”和“.xls”两种文件名,你可以使用以下代码:

=MID(SUBSTITUTE(CELL("filename", A1),".xls]",".xlsx]"),6+SEARCH(".xlsx]",SUBSTITUTE(CELL("filename", A1),".xls]",".xlsx]")),32)

-2
我相信你本可以通过谷歌搜索得到这个答案。我刚刚搜索了一下,这是我找到的第一个结果。
In Excel it is possible to use the CELL function/formula and the MID and FIND to return the name of an Excel Worksheet in a Workbook. The formula below shows us how;

=MID(CELL("filename",A1),FIND("]",CELL("filename",A1))+1,256)

Where A1 is any non error cell on the Worksheet. If you want the full path of the Excel Workbook, simply use;

=CELL("filename",A1)

唯一的注意事项是您必须保存文件才能使其正常工作!

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接