Передача нескольких диапазонов в качестве параметра массива AGGREGATE - PullRequest
0 голосов
/ 20 октября 2018

Буду признателен, если кто-нибудь узнает, задокументирована ли следующая проблема и / или каковы основные причины.

Предполагая, например, что у нас есть числа от 1 до 10 в A1:A10,Следующая формула

=SUMPRODUCT(SUBTOTAL(4,OFFSET(A1,{0;5},0,5)))

является абсолютно верной и эквивалентна взятию суммы максимальных значений из каждого из диапазонов A1:A5 и A6:A10, поскольку функция OFFSETздесь передается массив значений ({0;5}) в качестве его параметра rows и с соответствующим параметром height (5), разрешается в массив диапазонов:

{A1:A5,A6:A10}

, который затем передается в SUBTOTAL для генерации дополнительного массива, содержащего максимальные значения из каждого из этих диапазонов, то есть 5 и 10, перед суммированием в SUMPRODUCT.

AGGREGATE был представлен в Excel 2010 как, казалось бы, более усовершенствованная версия SUBTOTAL.Мой вопрос заключается в том, почему при попытке следующего

=SUMPRODUCT(AGGREGATE(14,,OFFSET(A1,{0;5},0,5),1))

, который должен быть эквивалентен приведенному выше примеру SUBTOTAL, Excel отображает сообщение о том, что " Out Outресурсов при попытке вычислить одну или несколько формул"(и вернуть значение 0)?

( Обратите внимание, что пользователи неанглийской версии Excel могуттребуется другой разделитель внутри константы массива {0;5}. )

Это довольно неожиданная ошибка.Очевидно, что синтаксис не виноват, и прохождение конструкции OFFSET «не разрешено».В книге больше ничего нет, что заставляет Excel использовать так много ресурсов при попытке разрешить такую ​​конструкцию?

Аналогичный результат возникает с INDIRECT вместо OFFSET, то есть

=SUMPRODUCT(SUBTOTAL(4,INDIRECT({"A1:A5","A6:A10"})))

совершенно корректно, но

=SUMPRODUCT(AGGREGATE(14,,INDIRECT({"A1:A5","A6:A10"}),1))

выдает ту же ошибку, что и описанную выше.

С уважением

Ответы [ 2 ]

0 голосов
/ 24 октября 2018

Ошибка AGGREGATE, по-видимому, связана с передачей массива ссылок на диапазоны аргументу, который ожидает массив значений.Сообщение об ошибке имеет признаки передачи унитизированного указателя, что приводит к неожиданному поведению.Действительно, тот же диалог об ошибках показан с некоторыми другими функциями, такими как:

=MEDIAN(TRANSPOSE(INDIRECT({"a1:a5","a6:a10"})))

С другой стороны, разрешается передавать массив ссылок на четвертый или более поздний аргумент AGGREGATE, например:

=SUMPRODUCT(AGGREGATE(4,,B1,INDIRECT({"a1:a5","a6:a10"})))

Аналогичным образом SUBTOTAL допускает массивы ссылок во втором или более поздних аргументах, ни один из которых изначально не принимает массивы.Формула SUBTOTAL оценивается путем применения функции к каждой ссылке на диапазон в массиве, а именно:

   SUBTOTAL(4,INDIRECT({"a1:a5","a6:a10"}))
->{SUBTOTAL(4,A1:A5),SUBTOTAL(4,A6:A10)}

Форматирование массивы и ссылки на диапазон в определениях функций могут помочьс визуализацией обработки формулы:

AGGREGATE (function_num, опции, массив или ref1 , [ k или ref2 ], [ref3 ],…)

SUBTOTAL (номер_функции, ref1 , [ ref2 ], ...)

Обратите внимание, что reference только аргументы также допускают массивы ссылок.

Будет интересно посмотреть, есть ли какие-либо изменения в этом поведении с обновленным механизмом вычислений и динамическими массивами, которые в настоящее время находятся в предварительном просмотре Office 365 и должны быть выпущены в ближайшее время ...

0 голосов
/ 21 октября 2018

[Недостаточно репутации для добавления комментария.]

Excel на Mac возвращает следующее:

Массивы, содержащие диапазоны, не поддерживаются

...