Вдохновлен этим вопросом: Диапазоны разлива: приведение массивов к значению пересечения с @
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#)
дает такой результат. Именно то, что требовалось
Использование SUM
в качестве примера формулы типа 2
D3: =SEQUENCE(1,4,10,2)
C4: =SEQUENCE(4,1,1,1)
D4: =SUM(C4#,D3#)
дает такой результат (примечание, он суммирует все диапазоны параметров и не выдает - как ожидалось)
Добавление оператора неявного пересечения @
производит это (теперь это суммирует необходимую пару, но не выливает)
D4: =SUM(@C4#,@D3#)
Мы могли бы заполнить сетку, скопировав формулу ко всем ячейкам в сетке (обратите внимание, скопируйте в точности D4: =SUM(@$C$4#,@$D$3#)
, поэтому все ячейки относятся к @$C$4#
и @$D$3#
)
Но это побеждает цель Разлив в динамику c диапазон.
В попытке принудительно задать формулу для разлива я добавил ссылку на диапазоны разлива, которая не меняет результат
D4: =SUM(@$C$4#,@$D$3#)+(C4#+D3#)*0
Это разливает, но не дает ожидаемого результата
НО, становится еще интереснее!
Если мы используем e Инструмент оценки формулы выглядит так, как он работает , но затем возвращает неверный результат на последнем шаге
Например, оценка E5
После нескольких шагов оценки разрешается неявное пересечение
Затем выполняется оценка до 14, все хорошо
Предпоследний шаг: должен вернуть 14
верно?
Но нет!
Итак, мой вопрос: почему диапазон разлива составляет Формула, которая принимает параметры массива и проходит неявное пересечение, возвращает значение верхней левой ячейки диапазона разлива, а не значение из пересечения?