Excel,间接引用工作表范围

时间:2015-07-15 20:58:06

标签: excel excel-indirect

尝试使用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根本无法与一系列纸张一起使用。请告诉我,我错了,为什么。

3 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分: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

答案 2 :(得分:0)

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

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

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

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