3

尝试使用 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()))

这也是如此(但不使用 INDIRECT):

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

在我看来,INDIRECT 根本不能与一系列工作表一起使用。请告诉我我错了,为什么。

4

3 回答 3

0

看起来你可能是正确的。以下解决方法很丑陋,但它有效。 =MAX(MAX(INDIRECT("'1'!B1:C2")),MAX(INDIRECT("'2'!B1:C2")),MAX(INDIRECT("'3'!B1:C2")))

于 2015-07-16T17:41:56.563 回答
0

您可以将以下函数粘贴到 VBA 编辑器中,它将产生您正在寻找的结果。它返回工作簿中所有工作表中您指定的任何范围的最大值。像普通函数一样使用它,即=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
于 2015-07-17T16:13:18.517 回答
0

与上述解决方案类似,您也可以尝试使用数组公式。但是,这将要求您在每张纸上执行 MAX 功能(最好在每张纸上的同一单元格中)。例如,在工作表“1”上,单元格 D1 中有 MAX(B2:C2),然后在工作表“2”、工作表“3”等上也是如此。然后在摘要工作表上,使用以下数组公式:

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

然后一定要点击Ctrl++ShiftEnter其作为数组公式输入。

这假设“last_sheet”是一些整数值,例如 6,然后生成它的范围字符串(“A1:A6”),将其传递给 INDIRECT,后者将其传递给 ROW(),从而为您提供 1:6 的数组。此数组用作 ADDRESS 的工作表名称列表,它在六张工作表中的每张工作表的单元格 D1 处创建一个引用数组。数组被传递给返回 #VALUE! 的 INDIRECT!错误,直到您将错误数组传递给 N()。最后,max 返回数组中的最大值。您可以使用“评估公式”来查看它是如何逐步分解的,但希望这对您来说是一个很好的起点!

于 2016-08-11T15:18:56.660 回答