我搜索了excel函数文档和一般的MSDN搜索,但一直无法找到一种方法来返回没有VBA的工作表名称。
有没有办法在excel公式中获取工作表名称而无需诉诸VBA?
excel不是很好,但我找到了这些here
=MID(CELL("filename",A1),FIND("]",CELL("filename",A1))+1,256)
和A1
可以是工作表中的任何非错误单元格。
有关工作表的完整路径和名称,请使用
=CELL("filename",A1)
对于最新版本的Excel,公式语法为:
=MID(CELL("filename";A1);FIND("]";CELL("filename";A1))+1;255)
以下将隔离工作表名称:
=RIGHT(CELL("filename"),LEN(CELL("filename"))-FIND("]",CELL("filename")))
我有一个模块已经打开所以我做了一个自定义功能:
Public Function Sheetname (ByRef acell as Range) as string
Sheetname = acell.Parent.Name
End Function
如果文件路径中存在字符,则其他答案中给出的公式都不支持该情况。
下面的公式更复杂,但它可以正确处理这些情况:
=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)))
在文件名中有一个方括号']',因此需要根据以下内容修改上述公式,以查找方括号的最后一个匹配项。验证这适用于文件名/路径中的0,1或更多方括号。
=RIGHT(CELL("filename"),LEN(CELL("filename")) - FIND("]]]",SUBSTITUTE(CELL("filename"),"]","]]]",LEN(CELL("filename"))-LEN(SUBSTITUTE(CELL("filename"),"]","")))))
以上关于首先保存工作簿的评论也是一个关键,因为否则你会收到#Value!结果。
这是一个相当短的一个,有一些额外的好处:
REPT
函数进行反向查找(大多数其他答案出错方向)。A1
似乎是一个糟糕的选择,因为与errors
相比,$FZZ$999999
的可能性要高得多。?
是故意的,因为它不应该在文件路径中。=SUBSTITUTE(RIGHT(SUBSTITUTE(CELL("Filename",$FZZ$999999), "]",REPT("?", 999)), 999),"?","")
我很确定你可以用谷歌搜索这个。我刚刚做了,这是我第一件事。
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)
唯一的问题是你必须保存文件才能工作!