[Excel] 在单元格中通过数字而不是名称引用表单


Answers

如果可以使用将返回表单名称的UDF 用户定义函数

Function SHEETNAME(number As Long) As String
    SHEETNAME = Sheets(number).Name
End Function

那么像一个公式

=SUM(INDIRECT(SHEETNAME(3) &"!B:B"))

将返回表3中列B的总和。

SHEETNAME(number)返回索引号码的表名。

所以Sheet(1)返回Sheet1等

Question

让我们说sheet3.name = "d"

是否有一种方法,我可以放在sheet2的单元格=sum(sheet3!b:b)其中sheet3被替换为实际的sheet3名称?

我只能得到=sum('d'!b:b)到目前为止工作。

我可以使用VBA这可能,但我很好奇如何在一个单元格中这样做,所以我不必每次都运行一个宏。




在工作表的任何位置使用下面的公式来获取工作表名称 - 工作表必须有一个文件名才能工作:

=REPLACE(CELL("filename"),1,FIND("]",CELL("filename")),"") 

您可以使用间接引用该单元格:

=SUM(Indirect("'"&A1&"'!B:B"))

或者,如果您不想拥有第二个单元格,则可以将这两个公式合并为一个:

=SUM(INDIRECT("'"&REPLACE(CELL("filename"),1,FIND("]",CELL("filename")),"")&"'!B:B"))



我不确定这是不是一个好主意,但这是我能想到的第一个。

我会添加额外的功能到您的VBA项目,这将返回您的Sheet3的实际名称:

Function Sheet3Name()
    Sheet3Name = Sheet3.Name
End Function

接下来,当您在Excel单元格中创建列B:B的求和公式时,您需要这样做:

=SUM(INDIRECT(Sheet3Name()&"!A:A"))