如何按 excel 中的工作表索引号对多个工作表中的同一单元格求和?

How can you sum the same cell across multiple worksheets by worksheet index number in excel?

我正在尝试对 excel 工作簿中所有有效工作表的单元格 Y116 求和。为了帮助定义有效的工作表,我编写了一个 VBA 函数 SHEETNAME(number),即 returns 给定工作表索引(数字)处的工作表名称。我这样做是因为有效工作表的名称和数量永远不会保持不变,但是有效范围将始终从第 3 个工作表(即 SHEETNAME(3))开始,并将始终在最后一个工作表的第三个结束(即 SHEETNAME(SHEETS( )-2)) 在我的工作簿中。

我觉得 SUM() 和 INDIRECT() 应该相对简单,但我一直收到引用错误 (#REF!)。

我可以使用

获得我想要的格式的字符串
="'"&SHEETNAME(3)&":"&SHEETNAME(SHEETS()-2)&"'!Y116"

但是当我尝试将它们放在一起时出现引用错误:

=SUM(INDIRECT("'"&SHEETNAME(3)&":"&SHEETNAME(SHEETS()-2)&"'!Y116"))

我知道单元格 Y116 在我的所有工作表中都是有效引用,因为我可以使用工作表的实际名称而不是索引对公式进行硬编码,并且我得到了我正在寻找的答案。有什么建议吗?

这是 SHEETNAME() 函数: 函数 SHEETNAME(number As Long) As String<br> SHEETNAME = Sheets(number).名称 结束功能

要用 SUM(INDIRECT()) 做您想做的事,需要 return 一个包含 sheet 个名称的数组到间接函数。

要做到这一点,需要将 UDF 更改为:

Function SHEETNAME(srt As Long, ed As Long) As Variant
Application.Volatile

If ed - srt <= 0 Then Exit Function

Dim temp() As Variant
ReDim temp(1 To ed - srt + 1) As Variant

Dim i As Long
For i = srt To ed
    temp(i - srt + 1) = Worksheets(i).Name
Next

SHEETNAME = temp
End Function

然后可以使用:

=SUM(INDIRECT("'"&SHEETNAME(3,SHEETS()-2)&"'!Y116"))

但是,如果您无论如何都要迭代 sheet,为什么不直接在 UDF 中求和:

Function MY3DSUM(srt As Long, ed As Long, add As String) As Double
Application.Volatile

If ed - srt <= 0 Then Exit Function

Dim temp As Double
temp = 0

Dim i As Long
For i = srt To ed
     temp = temp + Worksheets(i).Range(add).Value2
Next

MY3DSUM = temp
End Function

那么你会称它为:

 =MY3DSUM(3,SHEETS()-2,"Y116")