Неожиданное поведение Spill Range для функций, которые принимают параметры массива - PullRequest
2 голосов
/ 16 января 2020

Вдохновлен этим вопросом: Диапазоны разлива: приведение массивов к значению пересечения с @

TL; DR:
A Формула, которая принимает параметры массива и передается в диапазон Spill с неявным пересечением, возвращает значение верхней левой ячейки диапазона Spill, а не значение из пересечения.


Многие функции в Excel принимать значения одного параметра и возвращать одно значение. Позволяет вызывать эти функции типа 1

Некоторые функции в Excel принимают массивы в качестве параметров и возвращают одно значение. Давайте назовем эти функции типа 2
К ним относятся SUM, SUMPRODUCT, GCD и др.

Рассмотрим вариант использования, в котором мы хотим заполнить сетку результатом формулы для пар значений

    C      D        E        F        G
3            10       12       14       16
4    1   f(1,10)  f(1,12)  f(1,14)  f(1,16)
5    2   f(2,10)  f(2,12)  f(2,14)  f(2,16)
6    3   f(3,10)  f(3,12)  f(3,14)  f(3,16)
7    4   f(4,10)  f(4,12)  f(4,14)  f(4,16)

В соответствии с новой парадигмой Dynami c Arrays, если строка и столбец параметров генерируются как диапазон Spill, тогда мы можем создать таблицу только с тремя формулами

Для иллюстрации, я буду использовать SEQUENCE для генерации параметров (это не обязательно должен быть Sequence, любая формула, которая выливается в строку / столбец, будет работать)

Использование DATE в качестве Пример формулы 1

D3: =SEQUENCE(1,4,10,2)
C4: =SEQUENCE(4,1,1,1)
D4: =DATE(2020,C4#,D3#)

дает такой результат. Именно то, что требовалось

enter image description here

Использование SUM в качестве примера формулы типа 2

D3: =SEQUENCE(1,4,10,2)
C4: =SEQUENCE(4,1,1,1)
D4: =SUM(C4#,D3#)

дает такой результат (примечание, он суммирует все диапазоны параметров и не выдает - как ожидалось)

enter image description here

Добавление оператора неявного пересечения @ производит это (теперь это суммирует необходимую пару, но не выливает)

D4: =SUM(@C4#,@D3#)

enter image description here

Мы могли бы заполнить сетку, скопировав формулу ко всем ячейкам в сетке (обратите внимание, скопируйте в точности D4: =SUM(@$C$4#,@$D$3#), поэтому все ячейки относятся к @$C$4# и @$D$3#)
Но это побеждает цель Разлив в динамику c диапазон.

enter image description here

В попытке принудительно задать формулу для разлива я добавил ссылку на диапазоны разлива, которая не меняет результат

D4: =SUM(@$C$4#,@$D$3#)+(C4#+D3#)*0

Это разливает, но не дает ожидаемого результата

enter image description here

НО, становится еще интереснее!

Если мы используем e Инструмент оценки формулы выглядит так, как он работает , но затем возвращает неверный результат на последнем шаге

Например, оценка E5

enter image description here

После нескольких шагов оценки разрешается неявное пересечение

enter image description here

Затем выполняется оценка до 14, все хорошо

enter image description here

Предпоследний шаг: должен вернуть 14 верно?

enter image description here

Но нет!

enter image description here

Итак, мой вопрос: почему диапазон разлива составляет Формула, которая принимает параметры массива и проходит неявное пересечение, возвращает значение верхней левой ячейки диапазона разлива, а не значение из пересечения?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...