Ещё одна попытка. Идея такая: постановка вопроса "нужен ли CSE в некоторой заданной формуле" не вполне корректна, т.к. вообще говоря одна и та же формула может давать осмысленный результат как без CSE, так и при CSE, но интерпретироваться она будет по-разному и результат будет разный. Я теперь задаю вопрос по-другому: "Как влияет CSE на интерпретацию формулы?".
Основная проблема по моему представлению на данный момент заключается в формировании полных перечней или критериев в пунктах 3 и 4 раздела "О синтаксических позициях, чувствительных к CSE" (см. ниже). Самостоятельно найти какую-то логику (например, почему МУМНОЖ не чувствительна к CSE, а ТРАНСП чувствительна) я не сумел. Ещё вопрос -- верно ли я сформулировал исключение СУММПРОИЗВ и есть ли другие подобные исключения.
ИТАК:
А. Если результатом формулы является диапазон или массив, то:
БЕЗ CSE из диапазона выбирается одно значение (см. ниже Правило выбора из диапазона), из массива (не являющегося диапазоном) берется первое значение;
ПРИ CSE возвращается массив целиком.
Б. Если ссылка на диапазон находится в определенных синтаксических позициях, которые будем называть чувствительными к CSE (см. ниже О синтаксических позициях, чувствительных к CSE), то
БЕЗ CSE из диапазона выбирается одно значение (см. ниже Правило выбора из диапазона);
ПРИ CSE используется массив целиком, причём как правило выполняется поэлементная операция (см. ниже Правило поэлементных операций).
О синтаксических позициях, чувствительных к CSE
0. В арифметическом выражении, составляющем аргумент функции СУММПРОИЗВ (но не в аргументах функций, входящих в выражение), независимо от CSE диапазоны интерпретируются как массивы, а арифметические операции и сравнения трактуются как поэлементные (см. ниже Правило поэлементных операций).
1. В функциях выбора (ЕСЛИ, ВЫБОР) аргументы, из которых осуществляется выбор (2-й и далее), НЕ ИНТЕРПРЕТИРУЮТСЯ, то есть значением функции является сам аргумент. В частности, если на позиции этого аргумента стоит ссылка, то и результатом функции является ссылка. В этих случаях нужно снова проверить в соответствии с данными правилами позицию, в которой стоит сама функция (как дальше используется результат).
2. Во всех случаях, когда результатом функции является ссылка (например ИНДЕКС, СМЕЩ, ДВССЫЛ) также нужно проверить в соответствии с данными правилами позицию, в которой стоит сама функция (как дальше используется результат).
3. Ссылка на диапазон интерпретируется как массив независимо от CSE в функциях СУММ, ПРОИЗВ, МУМНОЖ, МОПРЕД, ...
4. Ссылка на диапазон чувствительна к CSE в 1-м аргументе функций ЕСЛИ, ВЫБОР, в арифметических операциях и сравнениях, в функции ТРАНСП, ...
Правило выбора из диапазона (без CSE)
Если диапазон является строкой, и столбец, в котором находится ячейка с РАССМАТРИВАЕМОЙ ФОРМУЛОЙ, принадлежит диапазону, то выбирается элемент диапазона из этого столбца.
Если диапазон является столбцом, и строка, в которой находится ячейка с РАССМАТРИВАЕМОЙ ФОРМУЛОЙ, принадлежит диапазону, то выбирается элемент диапазона из этой строки.
В остальных случаях возвращается ошибка #ЗНАЧ!
Правило поэлементных операций
1. Если размеры массивов-операндов совпадают, то операция последовательно выполняется с отдельными элементами массивов-операндов, расположенных на одинаковых позициях в массивах. Результат имеет тот же размер, что и операнды.
2. Если один из операндов является столбцом или строкой, и число его элементов равно соответствующему измерению остальных операндов, то операция выполняется согласно п.1, считая, что операнд-столбец или строка повторён нужное количество раз.
3. Если один из операндов является одиночным значением, то операция выполняется согласно п.1, считая, что оно повторяется нужное количество раз.
4. Если первый операнд является строкой, а остальные -- столбцами, или наоборот, то операция выполняется для каждого отдельного элемента первого операнда, и результаты объединяются в двумерный массив.
Основная проблема по моему представлению на данный момент заключается в формировании полных перечней или критериев в пунктах 3 и 4 раздела "О синтаксических позициях, чувствительных к CSE" (см. ниже). Самостоятельно найти какую-то логику (например, почему МУМНОЖ не чувствительна к CSE, а ТРАНСП чувствительна) я не сумел. Ещё вопрос -- верно ли я сформулировал исключение СУММПРОИЗВ и есть ли другие подобные исключения.
ИТАК:
А. Если результатом формулы является диапазон или массив, то:
БЕЗ CSE из диапазона выбирается одно значение (см. ниже Правило выбора из диапазона), из массива (не являющегося диапазоном) берется первое значение;
ПРИ CSE возвращается массив целиком.
Б. Если ссылка на диапазон находится в определенных синтаксических позициях, которые будем называть чувствительными к CSE (см. ниже О синтаксических позициях, чувствительных к CSE), то
БЕЗ CSE из диапазона выбирается одно значение (см. ниже Правило выбора из диапазона);
ПРИ CSE используется массив целиком, причём как правило выполняется поэлементная операция (см. ниже Правило поэлементных операций).
О синтаксических позициях, чувствительных к CSE
0. В арифметическом выражении, составляющем аргумент функции СУММПРОИЗВ (но не в аргументах функций, входящих в выражение), независимо от CSE диапазоны интерпретируются как массивы, а арифметические операции и сравнения трактуются как поэлементные (см. ниже Правило поэлементных операций).
1. В функциях выбора (ЕСЛИ, ВЫБОР) аргументы, из которых осуществляется выбор (2-й и далее), НЕ ИНТЕРПРЕТИРУЮТСЯ, то есть значением функции является сам аргумент. В частности, если на позиции этого аргумента стоит ссылка, то и результатом функции является ссылка. В этих случаях нужно снова проверить в соответствии с данными правилами позицию, в которой стоит сама функция (как дальше используется результат).
2. Во всех случаях, когда результатом функции является ссылка (например ИНДЕКС, СМЕЩ, ДВССЫЛ) также нужно проверить в соответствии с данными правилами позицию, в которой стоит сама функция (как дальше используется результат).
3. Ссылка на диапазон интерпретируется как массив независимо от CSE в функциях СУММ, ПРОИЗВ, МУМНОЖ, МОПРЕД, ...
4. Ссылка на диапазон чувствительна к CSE в 1-м аргументе функций ЕСЛИ, ВЫБОР, в арифметических операциях и сравнениях, в функции ТРАНСП, ...
Правило выбора из диапазона (без CSE)
Если диапазон является строкой, и столбец, в котором находится ячейка с РАССМАТРИВАЕМОЙ ФОРМУЛОЙ, принадлежит диапазону, то выбирается элемент диапазона из этого столбца.
Если диапазон является столбцом, и строка, в которой находится ячейка с РАССМАТРИВАЕМОЙ ФОРМУЛОЙ, принадлежит диапазону, то выбирается элемент диапазона из этой строки.
В остальных случаях возвращается ошибка #ЗНАЧ!
Правило поэлементных операций
1. Если размеры массивов-операндов совпадают, то операция последовательно выполняется с отдельными элементами массивов-операндов, расположенных на одинаковых позициях в массивах. Результат имеет тот же размер, что и операнды.
2. Если один из операндов является столбцом или строкой, и число его элементов равно соответствующему измерению остальных операндов, то операция выполняется согласно п.1, считая, что операнд-столбец или строка повторён нужное количество раз.
3. Если один из операндов является одиночным значением, то операция выполняется согласно п.1, считая, что оно повторяется нужное количество раз.
4. Если первый операнд является строкой, а остальные -- столбцами, или наоборот, то операция выполняется для каждого отдельного элемента первого операнда, и результаты объединяются в двумерный массив.
Изменено: - 03.11.2016 21:05:12