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

Excel formula 什么Excel公式返回工作表名称?,excel-formula,excel-2013,Excel Formula,Excel 2013,我已经搜索了excel函数文档和通用MSDN搜索,但找不到返回没有VBA的工作表名称的方法 有没有一种方法可以在excel公式中获取工作表名称而无需借助VBA?使用excel不是很好,但我发现了这些方法 和A1可以是工作表中的任何非错误单元格。 对于图纸的完整路径和名称,请使用 =CELL("filename",A1) 下面将隔离图纸名称: =RIGHT(CELL("filename"),LEN(CELL("filename"))-FIND("]",CELL("filename"))) 我很

我已经搜索了excel函数文档和通用MSDN搜索,但找不到返回没有VBA的工作表名称的方法


有没有一种方法可以在excel公式中获取工作表名称而无需借助VBA?

使用excel不是很好,但我发现了这些方法

A1
可以是工作表中的任何非错误单元格。
对于图纸的完整路径和名称,请使用

=CELL("filename",A1)

下面将隔离图纸名称:

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

我很确定你可以用谷歌搜索这个。我刚做了,这是我想到的第一件事

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)

唯一需要注意的是,您必须保存该文件才能工作

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

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

对于最新版本的Excel,公式语法为:

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

其他答案中给出的公式都不支持filepath中存在字符]的情况

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

 =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"),"]","")))))
  • 使用替换函数替换所有方括号,然后将结果的长度与文件名的长度进行比较,以确定文件名中方括号的数量
  • 使用方括号的出现次数将最后一个方括号替换为3个连续方括号']]'
  • 使用Find函数标识字符串中3个方括号的位置
  • 从完整路径的长度中减去3个方括号的位置
  • 使用结果获取最右边的字符(图纸名称)
  • 上面关于先保存工作簿的评论也是一个关键,否则您将收到#值!结果。

    这里有一个合理的简短例子,它有两个额外的好处:

    • 使用经常被忽略的
      REPT
      功能进行反向查找(大多数其他答案的方向错误)
    • A1
      似乎是个糟糕的选择,因为与<代码>$FZZ$99999
    • 别忘了绝对。复制和粘贴其他一些示例可能会由于引用更改而出错
    • 是故意的,因为它不应该在文件路径中

    =SUBSTITUTE(右(SUBSTITUTE(单元格(“文件名”),$FZZ$999999),“]”,REPT(“?”,999)),999),“?”,“)

    以下方法对我有效,并且比其他解决方案更简单(至少对我而言),同时仍然处理文件名中的方括号:

    =MID(CELL("filename", A1),6+SEARCH(".xlsx]",CELL("filename", A1)),32)
    
    这假设它是一个“xlsx”文件,并且除了xlsx后缀之外,文件名将不包含“.xlsx]”,在我的例子中,这是一个足够安全的假设

    如果要同时处理“.xlsx”和“.xls”文件名,可以使用:

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

    看来你的答案不完整。请演示它如何回答原始问题。另外,使用{}按钮格式化为代码。这并不是回答OP的问题,因为他特别问“有没有一种方法可以在excel公式中获取工作表名称而无需借助VBA?”,然而,这是VBA的答案?如果从不同的工作表重新计算工作簿,则不起作用:在这种情况下,工作簿的值始终是活动工作表的名称。@feetwet也有同样的问题,原因是
    单元格(“filename”)
    忽略了可选参数,但在这种情况下是必需的参考参数。使用单元格引用工作簿中的任何单元格,“修复”了预期的行为:
    单元格(“文件名”;A1)
    。如果此文件路径中的任何文件夹名称中包含字符],则无法正常工作。我认为我很聪明,省略了
    ,A1
    s,并将
    256
    更改为
    255
    ,但是它有一个缺陷,即如果从不同的工作表重新计算工作簿,它将不起作用:在这种情况下,它的值始终是活动工作表的名称。非常有用,非常感谢。请注意,你必须将文件保存在某个地方,这样才能工作(它不能是“第一册”或任何东西)。@Alex谢谢你的反馈!自从我发布这篇文章以来,我最初链接的资源似乎发生了巨大的变化-谢谢你确认它仍然有效。
    =MID(SUBSTITUTE(CELL("filename", A1),".xls]",".xlsx]"),6+SEARCH(".xlsx]",SUBSTITUTE(CELL("filename", A1),".xls]",".xlsx]")),32)