Страницы: 1
RSS
Использование матриц для суммирования 2дмассивов по двум условиям
 
В теме    
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))    
 
по работе с массивами смотри справку мумнож
 
Оказывается у задачи есть ещё более красивое решение,  
точнее изумительно красивое.....  
 
формула массива  
=СУММ(ЕСЛИ(((A6:A22)=C30)*((B5:K5)=C31);B6:K22;0))  
 
пример выложу в отдельной ветке
 
:))  
 
всегда так считаю
Страницы: 1
Читают тему
Наверх