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