让我们说
sheet3.name = "d"
有没有办法可以在sheet2
公式=sum(sheet3!b:b)
上的单元格中放入sheet3
实际的 sheet3 名称?
=sum('d'!b:b)
到目前为止,我只能上班。
我可能可以为此使用 VBA,但我很好奇如何在单元格中执行此操作,因此我不必每次都运行宏。
让我们说
sheet3.name = "d"
有没有办法可以在sheet2
公式=sum(sheet3!b:b)
上的单元格中放入sheet3
实际的 sheet3 名称?
=sum('d'!b:b)
到目前为止,我只能上班。
我可能可以为此使用 VBA,但我很好奇如何在单元格中执行此操作,因此我不必每次都运行宏。
如果您可以使用将返回工作表名称的 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 等
在工作表中的任何位置使用以下公式来获取工作表名称 - 工作表必须有一个文件名才能工作:
=REPLACE(CELL("filename"),1,FIND("]",CELL("filename")),"")
您可以使用间接引用该单元格:
=SUM(Indirect("'"&A1&"'!B:B"))
或者,如果您不想拥有第二个单元格,则可以将两个公式合并为一个:
=SUM(INDIRECT("'"&REPLACE(CELL("filename"),1,FIND("]",CELL("filename")),"")&"'!B:B"))
对于不关心表格顺序的任何人,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)。
我不确定这是否是一个好主意,但这是我能想到的第一个。
我会在您的 VBA 项目中添加其他功能,该功能将返回您的 Sheet3 的实际名称:
Function Sheet3Name()
Sheet3Name = Sheet3.Name
End Function
接下来,当您在 Excel 单元格中创建 B:B 列的求和公式时,您需要这样做:
=SUM(INDIRECT(Sheet3Name()&"!A:A"))