Excel,间接参考工作表范围

尝试使用INDIRECT来引用一系列工作表,以及这些工作表中的一系列单元格,以查找MAX。 这些都没有工作:

=MAX(INDIRECT("1:"&last_sheet&"!G"&ROW()&":K"&ROW())) =MAX(INDIRECT("1:6!G"&ROW()&":K"&ROW())) 

但是,这(但只看一张:1):

 =MAX(INDIRECT("1!G"&ROW()&":K"&ROW())) 

这样做(但不使用间接):

 =MAX('1:6'!G6:K6) 

在我看来,INDIRECT根本不能用于一系列的纸张。 请告诉我,我错了,为什么。

看起来你可能是正确的。 下面的解决方法是丑陋的,但它的工作原理。 =MAX(MAX(INDIRECT("'1'!B1:C2")),MAX(INDIRECT("'2'!B1:C2")),MAX(INDIRECT("'3'!B1:C2")))

你可以把下面的函数粘贴到VBA编辑器中,它会产生你正在查找的结果。 它将返回工作簿中所有工作表中指定范围的最大值。 使用它就像一个常规的function,即=MultiMax(A1) 。 它也接受一个INDIRECT作为参数。

 Function MultiMax(r As Range) As Long Dim s As Worksheet Dim a() As Long Dim m As Long ReDim a(0 To 0) For Each s In ThisWorkbook.Sheets m = Application.WorksheetFunction.Max(s.Range(r.Address).Value) ReDim Preserve a(0 To UBound(a) + 1) a(UBound(a)) = m Next Dim y As Integer Dim m1 As Long For y = 0 To UBound(a) If a(y) > m1 Then m1 = a(y) End If Next MultiMax = m1 End Function 

类似于上面的解决scheme,你也可以尝试一个数组公式。 但是,这将要求您在每张纸上执行MAXfunction(最好在每张纸上的同一个单元格中)。 例如,在工作表'1'上,在单元格D1中有MAX(B2:C2),然后在工作表'2',工作表'3'上具有相同的值。然后在汇总表中使用此数组公式:

 =MAX(N(INDIRECT(ADDRESS(1,4,,,ROW(INDIRECT("A1:A"&last_sheet)))))) 

然后一定要按Ctrl + Shift + Enter将其作为数组公式input。

这假设“last_sheet”是一些像6的整数值,然后使它的范围string(“A1:A6”),将其传递给INDIRECT,它将它传递给ROW()给你一个从1:6的数组。 此数组用作ADDRESS的表名称列表,它在六个工作表中的每一个的单元格D1上创build一个引用数组。 数组传递给INDIRECT,返回#VALUE! 直到您将错误数组传递给N()。 最后,max返回数组中最大的值。 你可以使用“评估公式”来看看它如何一步一步崩溃,但希望这是一个很好的起点!