9

让我们说 sheet3.name = "d"

有没有办法可以在sheet2公式=sum(sheet3!b:b)上的单元格中放入sheet3实际的 sheet3 名称?

=sum('d'!b:b)到目前为止,我只能上班。

我可能可以为此使用 VBA,但我很好奇如何在单元格中执行此操作,因此我不必每次都运行宏。

4

4 回答 4

9

如果您可以使用将返回工作表名称的 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 等

于 2013-11-05T14:25:57.383 回答
7

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

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

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

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

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

=SUM(INDIRECT("'"&REPLACE(CELL("filename"),1,FIND("]",CELL("filename")),"")&"'!B:B"))
于 2013-11-05T14:24:51.083 回答
2

对于不关心表格顺序的任何人,Biff 在 mrexcel.com 上的帖子效果很好。

在 Excel 2013 中,转到功能区中的“公式”选项卡并定义名称:

Name: SheetNames
Refers to: =GET.WORKBOOK(1)&T(NOW())

然后使用像这个例子这样的公式:

=INDIRECT("'"&INDEX(MID(SheetNames,FIND("]",SheetNames)+1,255),A3)&"'!A1")

其中 A3 是指当前工作表中单元格中的索引号,A1 是指要从另一个工作表中检索的值的位置。即,在当前工作表中,如果 A3 = 2,则公式将指向工作簿第二张工作表中的单元格 A1。我只是在当前工作表中使用一列索引号,然后将此公式向下拖动,它会填充我所有其他工作表中的值。

您需要另存为启用宏的文件 (.xlsm)。

于 2018-11-26T18:38:12.130 回答
1

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

我会在您的 VBA 项目中添加其他功能,该功能将返回您的 Sheet3 的实际名称:

Function Sheet3Name()
    Sheet3Name = Sheet3.Name
End Function

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

=SUM(INDIRECT(Sheet3Name()&"!A:A"))
于 2013-11-05T14:24:02.663 回答