Excel Array Evaluation и некоторые хитрости - PullRequest
0 голосов
/ 05 июня 2018

Я натолкнулся на некоторые хитрости оценки массива в сети.Но я не мог понять теорию.Я думаю, что есть много таких, как я, которые хотят знать об этом предмете.

  • что такое оценка массива и зачем нам это нужно?
  • как это сделать N( INDEX (.....)) трюк за кадром?
  • как N( IF (1,.....)) трюк работает за кулисами?
  • почему мы должны использовать N function здесь?

Ответы [ 2 ]

0 голосов
/ 22 июня 2018

Это довольно открытый вопрос, и, в отсутствие исходного кода, он должен основываться на эмпирических данных с использованием доступных инструментов формул, а также документации ECMA / ODF.

Что такое оценка массива изачем нам это нужно?

Стандарт открытых формул описывает здесь общую модель обработки формул: http://docs.oasis -open.org / office / v1.2 / os / OpenDocument-v1.2-os-part2.html #__ RefHeading__1017860_715980110

Возьмем в качестве простого примера следующую формулу, где функция ABS, как и многие другие, принимает и возвращает числовые значения:

=SUM(ABS(A1:A3))

При нормальном вводе аргументы значения разрешаются путем пересечения с той же строкой или столбцом, что и ячейка формулы.Таким образом, если введено в B2, то приведенное выше разрешится в ABS(A2).

С другой стороны, если вводить в виде формулы массива с помощью Ctrl + Shift + Enter, фигурные скобки {.} помещаются вокруг формулы,и аргумент SUM равен вычисленному массиву , возвращающему результат, равный:

=ABS(A1)+ABS(A2)+ABS(A3)

Оценка массива такого типа может быть очень полезна для сокращения промежуточноговычисления, а также сокращение длины формулы.

Однако некоторые функции, такие как INDEX, VLOOKUP, HLOOKUP, CELL, FILTERXML и HYPERLINK, могут возвращать массивы.Как указано выше в ссылке OpenFormula, такие функции не выполняют итерации по значениям аргументов так же, как ABS.Для принудительного создания массива с этими функциями необходимы приемы, описанные в следующем разделе.

Как N(IF(.)) и N(INDEX(.)) работают за кадром?

Учтите этопара формул (например, если C1:C3 = {2;5;7} результат =A2+A5+A7):

=SUM(INDEX(A:A,N(INDEX(+C1:C3,))))

=SUM(INDEX(A:A,N(IF({1},C1:C3,))))

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

[1]=+N(INDEX({2;5;7},)) -> +N({2;5;7}) -> +{2;5;7}

[2]=+N(INDEX(C1:C3,)) -> +N($C$1:$C$3) -> +2

[3]=+N({2;5;7}) -> +N(2) -> +2

Сравнение результатов:

[1] & [2]: INDEX returns array / reference types

[2] & [3]: N takes reference / value types

[1] & [3]: N(INDEX(,)) returns an array that is passed like a value type

Результат строки выше можно обозначить как [{2;5;7}], где [.] - это тип значенияссылка "на массив.В формулах такой результат может потребоваться передать в другую функцию IF или INDEX, чтобы избежать появления ошибки.Такой же тип результата получается из любой подобной комбинации типов данных:

array / reference -> value / reference

Другой пример - AGGREGATE с IF в 4-м аргументе.

Почемуздесь нужно использовать функцию N?

Функция N эффективно передает аргумент массива по ссылке , иначе результат функции IF будетпередано по значению .

Чтобы увидеть это, примените инструмент Evaluate Formula со ссылочным аргументом в формуле =N(A1) не преобразуется, тогда как в других функциях, таких как =ABS(A1).

Обратите внимание, что функции листа работаюттип суммы (XLOPER), который может быть комбинацией собственных типов данных Excel: значение (число, текст, логическое, любое);Массив;Ссылка.

Типы данных можно найти как в мастере функций, так и в инструментах «Оценка формул», выполнив шаги с аргументами ссылки и массива (например, A1 и {1}).

Для получения полного списка (+дальнейшие ссылки) см .: https://chandoo.org/forum/threads/excel-function-reference.35686/

0 голосов
/ 05 июня 2018
  1. Введите формулу.
  2. Выберите ее.
  3. Перейдите на ленту и выберите Формула> Оценить
  4. Нажмите Оцените и посмотритедля себя

enter image description here

...