Документация HotXLS

Выбор области INDEX и ссылочная идентичность

Документация HotXLS · Точность вычислений и преобразований

Версия 2.384.101 расширяет INDEX(source,row_num,column_num,area_num): четвёртый аргумент принимается для вычисляемых массивов, а поддерживаемые настоящие multi-area ссылки компонуются через определённые имена и LET; селекторы строки, столбца и области могут транслироваться вместе

Один вычисляемый массив или несколько ссылочных областей

Константа или вычисляемый массив — это одна область источника, поэтому INDEX(SEQUENCE(2,2),2,2,1) возвращает 4; полное опускание четвёртого аргумента тоже выбирает область 1, а явно пустой четвёртый аргумент — недопустимый селектор области

Объединение ссылок может содержать несколько настоящих областей листа на одном листе; area_num выбирает область в порядке объединения, а номера строки и столбца применяются внутри выбранной области

Для примеров ниже Source!A1:B2 содержит {1,2;3,4}, Source!D1:E2 содержит {10,20;30,40}, а Other!A1:B2 содержит {100,200;300,400}

ФормулаРезультат
INDEX((Source!A1:B2,Source!D1:E2),2,2,2)40 с сохранением скалярного ссылочного результата
SUM(INDEX((Source!A1:B2,Source!D1:E2),0,0,2))100 — сумма всей второй области
INDEX(SEQUENCE(2,2),0,0,1){1,2;3,4} — вычисленный массив значений
INDEX(SEQUENCE(2,2),2,2,2)#REF!, потому что у вычисляемого массива нет второй области

Определённые имена, LET и CHOOSE

Поддерживаемое локальное определённое имя с выражением (Source!$A$1:$B$2,Source!$D$1:$E$2) сохраняет обе области; вложенные имена сохраняют эту идентичность, а AREAS(NamedAreas) возвращает 2

INDEX(NamedAreas,2,2,2) возвращает 40, а ISREF(INDEX(NamedAreas,0,0,2)) возвращает TRUE; ROW, COLUMN, ROWS, COLUMNS и агрегирующие потребители продолжают использовать координаты выбранной ссылки

Относительные ссылочные имена разрешаются в каждой позиции потребителя, а локальное для листа имя имеет приоритет над именем книги с тем же написанием; сохранение ссылочной идентичности не замораживает относительное имя в позиции первого вычисления

LET(areas,(Source!A1:B2,Source!D1:E2),INDEX(areas,2,2,2))
LET(areas,(Source!A1:B2,Source!D1:E2),ISREF(INDEX(areas,0,0,2)))

Эти выражения возвращают 40 и TRUE соответственно; привязка к SEQUENCE(2,2) остаётся вычисленным массивом значений и не приобретает ссылочную идентичность

Скалярный CHOOSE, выбирающий настоящую ссылку, сохраняет выбранную ссылку, включая выбор на другом листе: INDEX(CHOOSE(2,Source!A1:B2,Other!A1:B2),2,2) возвращает 400, и соответствующий скалярный ссылочный результат проходит ISREF

CHOOSE с селектором-массивом комбинирует значения по ориентации селектора, а не строит объединение ссылочных областей; CHOOSE({1,2},Source!A1:B2,Source!D1:E2) возвращает {1,20;3,40}, а дополнительный селектор области 2 в INDEX по-прежнему возвращает #REF!

Три массива селекторов

Селекторы строки, столбца и области принимают скаляры или массивы; одиночные измерения транслируются, противоположные ориентации строки и столбца образуют перекрёстное произведение, а совпадающие сопоставляют позиции; несопоставленные позиции в неравных формах содержат отдельные ошибки #N/A

INDEX((Source!A1:B2,Source!D1:E2),{1;2},2,{1,2})
INDEX((Source!A1:B2,Source!D1:E2),2,2,{2;1})

Первое выражение возвращает {2,20;4,40}, второе — {40;4}; выбранные значения сохраняют представления строк, Boolean, чисел и типизированных ошибок

Если любой селектор — массив, результат является массивом значений, а не ссылкой; нулевая строка или столбец, либо опущенный селектор строки или столбца, выбирает первый элемент этой оси в каждой позиции результата

Это отличается от извлечения только скалярами: два скалярных нуля строки и столбца возвращают всю выбранную область, но INDEX((Source!A1:B2,Source!D1:E2),0,0,{1,2}) возвращает {1,10}, а не два вложенных массива два на два; сумма результата — 11

Приведение областей и ошибки

Селекторы области усекают дробные числовые значения к нулю и принимают числовой текст и Boolean-значения; 1.9, "1" и TRUE выбирают область 1

Нулевая область, FALSE, явно пустой четвёртый аргумент, отрицательные значения и дроби, усекающиеся до нуля, возвращают #VALUE!; нечисловой текст тоже возвращает #VALUE!, а положительная область сверх числа доступных областей возвращает #REF!

Типизированные ошибки селекторов пробрасываются с существующими кодами ошибок; для селектора-массива недопустимая область даёт ошибку только в соответствующей позиции результата, поэтому INDEX(SEQUENCE(2,2),2,2,{1,2}) возвращает {4,#REF!}

Существующие ошибки не замещаются позднейшими проверками границ: INDEX(#N/A,1,1,2) возвращает #N/A, а INDEX(SEQUENCE(2,2),#N/A,1,#DIV/0!) сохраняет #N/A селектора строки

Недопустимая ссылка с квалификатором существующего локального листа остаётся #REF!, включая Source!#REF! и 'Plan! O''Brien'!#REF!; определённое имя, содержащее эту локальную ссылочную ошибку, тоже сохраняет #REF! при передаче в INDEX или ISFORMULA

Локальный токен ошибки можно использовать с операторами процента и неявного пересечения, а пробельные символы после разделителя листа допустимы; пробелы между именем листа и его разделителем лежат вне принимаемого синтаксиса

Строки формул в кавычках вроде "Source!#REF!" остаются текстом; токен ссылки с квалификатором листа внутри константы-массива лежит вне поддерживаемой грамматики источников

Селекторы строки и столбца сохраняют прежние правила нулевого извлечения и проверки отрицательных значений; нулевая область никогда не означает извлечение всего источника

Хранение, зависимости и лимиты

Автоматический spill-расчёт XLSX может растить или сжимать результаты селекторов-массивов и освобождает устаревших followers, принадлежащих якорю; поддерживаемые выражения также вычисляются внутри явного фиксированного CSE-назначения и переживают сохранение и повторное открытие XLSX

Именованный селектор может требовать консервативного динамического хранения, даже когда его вычисленный результат скалярен; динамический маркер в одну ячейку не меняет значение и идентичность поддерживаемого ссылочного результата

Выбранные исходные ссылки и вложенные имена участвуют в отслеживании зависимостей, поэтому последующие правки источника замечаются после пересчёта; обход селекторов и генерируемые полезные нагрузки матриц расходуют прежние бюджеты шагов вычисления и памяти массивов

Границы

Прямое объединение, области которого принадлежат разным листам, возвращает #VALUE!, даже если запрошенный номер области выбрал бы только одну из них; скалярный CHOOSE, выбирающий одну ссылку, остаётся поддерживаемой альтернативой для разных листов

Объединение вычисляемых массивов, констант или выражений значений не является настоящей multi-area ссылкой; объединения вычисляемых массивов через LET возвращают #VALUE!, а прямой синтаксис массива массивов не принимается как форма источника

Этот контракт покрывает проверенные локальные формы ссылок и вычисляемых массивов; он не означает поддержку любых графов внешних ссылок, любой функции, производящей ссылки, или произвольных вложенных контейнеров массивов

Неизвестный квалификатор листа не нормализуется как известная локальная ссылочная ошибка; Excel может создать граф внешних ссылок для формулы вроде NoSuchSheet!#REF!, и совпадение с этим графом лежит вне данного контракта локальных вычислений