В теме http://www.planetaexcel.ru/forum.php?thread_id=2835 был задан вопрос Суммесли для одномерного и двумерного массивов? предлагается для решения тамошней задачи использовать матрицы. Почемуто я наблюдаю гнусное перенебрежение к этим мат-эксель-объектам со стороны местных классиков жанра. В приложенном примере пытаюсь исправить ситуацию.
ЗАДАЧА Есть столбец с кодами статей затрат ( A6:A22) Строка с номерами категорий ( B5:K5) и соответствующий двумерный диапазон с суммами ( B6:K22). коды и категории могут совпадать Необходимо найти сумму для заданного кода и категории
То есть задача сводится к суммированию по двум условиям, когда длины условий не совпадают СуммЕсли (A6:A22=код и B5:K5 = категория ; B6:K22)
РЕШЕНИЕ с использованием матриц =МУМНОЖ(ТРАНСП(МУМНОЖ($B$6:$K$22;ТРАНСП(ЕСЛИ($B$5:$K$5=B31;1;0))));ЕСЛИ($A$6:$A$22=A32;1;0)) где B31 категория A32 код формула массива естстннна
dl, если вас не затруднит, можно по-подробнее объяснить конструкцию? Как я полагаю, результат вычислений - произведение 3 пар матриц, причем в 2-х парах одна из сомножителей-матриц - это проверка искомого условия, которая возвращает матрицу либо 1, либо 0. Вопрос, какого вида получаются эти матрицы? если не затруднит можно-ли изобразить логику расчета поэтапно, в 3-х таблицах excel.
{quote}{login=Denis}{date=15.03.2008 12:26}{thema=}{post}dl, если вас не затруднит, можно по-подробнее объяснить конструкцию? Как я полагаю, результат вычислений - произведение 3 пар матриц, причем в 2-х парах одна из сомножителей-матриц - это проверка искомого условия, которая возвращает матрицу либо 1, либо 0. Вопрос, какого вида получаются эти матрицы? если не затруднит можно-ли изобразить логику расчета поэтапно, в 3-х таблицах excel.{/post}{/quote}
DL, спасибо за пример. Буду разбирать и учиться дальше. А "классиков" не надо укорять. Они выдают столько рабочих решений за единицу времени, что пока поймешь как это сделано и работает... В фразе главное РАБОЧИХ. ЗЫ некоторые так и не понял, взял за веру и использую, только повторить без первоисточника не могу.
Вобще в примере в колонке L присутствует пояснение к тому как работает формула, но чтобы в ней разобраться надо собственоручно поработать с формулами массивов, благо примеров на этом форуме не счесть.
А по математике матричное умножение
Новый элемент(i,k) = сумма_произведений(строка_i_матрицы1;столбец_k_матрицы2) В примере используется произведение матрицы с длиною строк N на столбец высотою N, в результате получается столбец высотою в число строк матрицы. Итак первая часть формулы МУМНОЖ($B$6:$K$22;ТРАНСП(ЕСЛИ($B$5:$K$5=B31;1;0))) эквивалентна выполнению для каждой строки матрицы $B$6:$K$22 операции СУММ(ЕСЛИ($B$5:$K$5=1;$B$i:$K$i;0)) или =СУММПРОИЗВ(Bi:Ki;ЕСЛИ(B5:K5=1;1;0)) i от 6 до 22 Итого получаем СТОЛБЕЦ со значениями сумм элемнтов каждой строки при выполнении для элемента условия для столбца $B$5:$K$5=B31 (проще выразиться не получилось уж не обессудьте) Вторая часть формулы представляет операцию умножения строки на столбец второго условия для строк МУМНОЖ(ТРАНСП(СТОЛБЕЦ));ЕСЛИ($A$6:$A$22=A32;1;0)) получается число аналогично выполнению операции СУММ(ЕСЛИ($A$6:$A$22=A32;СТОЛБЕЦ;0)) или =СУММПРОИЗВ(СТОЛБЕЦ;ЕСЛИ($A$6:$A$22=A32;1;0))