在数组中按编号而不是名称引用工作表

时间:2013-11-05 14:10:46

标签: excel vba excel-formula

让我们说 sheet3.name = "d"

我有没有办法在sheet2公式=sum(sheet3!b:b)的单元格中放置sheet3替换为实际的sheet3名称?

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

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

4 个答案:

答案 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)。