您不能在多个工作表中使用SUM:每个范围的整体都必须在一个工作表中。 SUM('A>:<A'!A1) 是一个无效的公式——你需要使用 SUM('A>'!A1,'1'!A1,'2'!A1,'<A'!A1) 来获得你想要的结果。 (即指定多个范围)
INDIRECT 和 CHOOSE 将忽略 Sheet Order 之类的内容,因此也不能用于此。
您可能能够使用 VBA 解决问题,使用 Worksheet.Index 引用,但不能使用普通的 Excel 公式。这是一个用户定义的函数(将其放在 VBA 中的新模块中,而不是在工作表中!)应该可以满足您的需求:
Option Explicit
Option Private Module
Public Function SUM3D(reference1 As Range, reference2 As Range) As Variant
Application.Volatile
SUM3D = CVErr(xlErrNA) 'Default to an Error
On Error GoTo FunctionError
Dim SumRange As String, TotalSum As Double, TempSum As Variant, StartIndex As Long, EndIndex As Long, CurrIndex As Long
TotalSum = 0
TempSum = 0
'Create the 2D range bounded by the 2 references, which will extend through the sheets
SumRange = Worksheets(1).Range(Worksheets(1).Range(reference1.Address(True, True, xlA1, False)), _
Worksheets(1).Range(reference2.Address(True, True, xlA1, False)) _
).Address(True, True, xlA1, False)
StartIndex = reference1.Worksheet.Index
EndIndex = reference2.Worksheet.Index
If StartIndex = EndIndex Then
'Same sheet, no need to make it 3D
SUM3D = Application.Sum(reference1, reference2)
Else
'Different sheets, so cycle through them.
For CurrIndex = StartIndex To EndIndex Step Sgn(EndIndex - StartIndex)
'Ignore Charts, DialogSheets, MacroSheets, etc
If Sheets(CurrIndex).Type = xlWorksheet Then
TempSum = Application.Sum(Sheets(CurrIndex).Range(SumRange))
If IsError(TempSum) Then
SUM3D = TempSum 'Return the Error
Exit Function
Else
TotalSum = TotalSum + TempSum 'Add this sheet's sum to the total
TempSum = 0
End If
End If
Next CurrIndex
End If
SUM3D = TotalSum
FunctionError:
On Error GoTo -1 'Clear error handler
End Function