Выбор области 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!, и совпадение с этим графом лежит вне данного контракта локальных вычислений