2015-07-15 7 views
2

Пытается использовать INDIRECT для ссылки на ряд листов и диапазон ячеек на этих листах, ища MAX. Ни одна из этих работ:Excel, косвенная ссылка на диапазон листов

=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 просто не может использоваться с рядом листов. Скажите, пожалуйста, я ошибаюсь и почему.

ответ

0

Похоже, вы, вероятно, правы. Следующий обходной путь является уродливым, но он работает. =MAX(MAX(INDIRECT("'1'!B1:C2")),MAX(INDIRECT("'2'!B1:C2")),MAX(INDIRECT("'3'!B1:C2")))

+0

спасибо. Однако вся причина использования INDIRECT заключается в том, что количество листов, на которые нужно смотреть, будет расти, и я хотел бы посмотреть на диапазон, конец которого указан «last_sheet» и будет меняться ежедневно. – rainrunner

+0

Может ли пользовательская функция использовать? Сделать это в VBA не составит труда. – nwhaught

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 
0

Как и вышеприведенное решение, вы также можете попробовать формулу массива. Однако это потребует от вас функции MAX на каждом листе (предпочтительно в одной ячейке на каждом листе). Например, на листе «1» у вас есть MAX (B2: C2) в ячейке D1, а затем на листе «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 возвращает наибольшее значение в массиве. Вы можете использовать «Evaluate Formula», чтобы увидеть, как он сломается шаг за шагом, но, надеюсь, это хорошая отправная точка для вас!

 Смежные вопросы

  • Нет связанных вопросов^_^