Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 03.11.2015, 11:30   #1
kievlyanin
Форумчанин
 
Регистрация: 21.04.2008
Сообщений: 110
По умолчанию матрица условий для сумирования (формулы) как использовать знак "*" ?

есть определенная матрица из 4-х условий при соблюдении которых формула выдает тот или иной результат:

=СУММПРОИЗВ(($C$1:$C$15=$K3)*($D$1: $D$15=$L3)*($E$1:$E$15=$M3)*($F$1:$ F$15=$N3)*$H$1:$H$15)


достаточно просто )

но например есть условие строка С и D не важно какое значение - я ставлю в этих строках "*" - формула не работает .. т.к. сравнение значения в к3 с каким то значением и столбце С со значением "*" дает ЛОЖЬ а надо ИСТИНА ...

как затавить сумпроизв воспринимать "*" ??
kievlyanin вне форума Ответить с цитированием
Старый 03.11.2015, 12:31   #2
Казанский
Старожил
 
Аватар для Казанский
 
Регистрация: 31.12.2010
Сообщений: 2,133
По умолчанию

Попробуйте этот фрагмент ($C$1:$C$15=$K3) заменить на
Код:
ЕСЛИ($C$1:$C$15=$K3;1;$C$1:$C$15="*")
Без файла-примера оптимизировать неохота.
exceleved@yandex.ru Яндекс.Деньги: 410011500007619
Казанский вне форума Ответить с цитированием
Старый 03.11.2015, 13:06   #3
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

оператор сравнения = сравнивает значения
оператор не использует подстановочные символы т.е. "все" = "*" - получите ЛОЖЬ

используйте функции, которые работают с подстановочными символами
например поиск("*";"что угодно") = 1
в Вашем случае
Код:
не(еош(поиск($K3;$C$1:$C$15)))
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 03.11.2015, 13:14   #4
kievlyanin
Форумчанин
 
Регистрация: 21.04.2008
Сообщений: 110
По умолчанию

ПОИСК() не работает т.к. сравнение надо обратное а не прямое .. т.е. в аргументе будет массив значений а в массиве - одно значение поскольку массив будет содержать "*" а аргумент всегда будет полным со всеми 4-мя условиями.


витиевато выразился )) т.е. если мы будем искать 1 _ 2_ 3 в базе где * _ 2 _ * то не найдет т.к. в условии четко определены 3 значения а если наоброт - то естественно найдем.

пример в файле:
Вложения
Тип файла: xlsx пример_.xlsx (12.7 Кб, 9 просмотров)

Последний раз редактировалось kievlyanin; 03.11.2015 в 13:21.
kievlyanin вне форума Ответить с цитированием
Старый 03.11.2015, 13:50   #5
Казанский
Старожил
 
Аватар для Казанский
 
Регистрация: 31.12.2010
Сообщений: 2,133
По умолчанию

kievlyanin, вот ваши 3 и 10
Вложения
Тип файла: xlsx пример_.xlsx (12.6 Кб, 7 просмотров)
exceleved@yandex.ru Яндекс.Деньги: 410011500007619
Казанский вне форума Ответить с цитированием
Старый 03.11.2015, 13:50   #6
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

в общем-то первая подсказка была правильной:
Цитата:
используйте функции, которые работают с подстановочными символами
Код:
=СУММПРОИЗВ(СЧЁТЕСЛИ(RC3;R3C3:R14C3)*СЧЁТЕСЛИ(RC4;R3C4:R14C4)*СЧЁТЕСЛИ(RC5;R3C5:R14C5)*СЧЁТЕСЛИ(RC6;R3C6:R14C6)*R3C7:R14C7)
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 03.11.2015, 14:48   #7
kievlyanin
Форумчанин
 
Регистрация: 21.04.2008
Сообщений: 110
По умолчанию

итого сделал так:


Код:
=СУММПРОИЗВ(МИН(ЕСЛИ((ЕСЛИ($C$3:$C$14=C27;1;$C$3:$C$14="*")*ЕСЛИ($D$3:$D$14=D27;1;$D$3:$D$14="*")*ЕСЛИ($E$3:$E$14=E27;1;$E$3:$E$14="*")*ЕСЛИ($F$3:$F$14=F27;1;$F$3:$F$14="*")
*$G$3:$G$14)>0;(ЕСЛИ($C$3:$C$14=C27;1;$C$3:$C$14="*")*ЕСЛИ($D$3:$D$14=D27;1;$D$3:$D$14="*")*ЕСЛИ($E$3:$E$14=E27;1;$E$3:$E$14="*")*ЕСЛИ($F$3:$F$14=F27;1;$F$3:$F$14="*")*$G$3:$G$14))))

на основе формулы Казанский поскольку получается что условие прямое и условвие с "*" будут идентичны для суммирования, то я сделал сумирование по минимальному результату - зная эту особенность я составлю матрицу условий суммирования по убыванию точности условия.

kievlyanin вне форума Ответить с цитированием
Старый 03.11.2015, 14:55   #8
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

а то, что я написал тоже выдает 3 и 10
(переведите ексель в режим ссылок R1C1 и скопируйте в любую из ячеек, где она должна быть. формула раза в 3 короче от той, что решили использовать Вы)
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете

Последний раз редактировалось IgorGO; 03.11.2015 в 14:59.
IgorGO вне форума Ответить с цитированием
Старый 03.11.2015, 15:34   #9
kievlyanin
Форумчанин
 
Регистрация: 21.04.2008
Сообщений: 110
По умолчанию

у вас тоже надо будет уходить от проблемы задвоения условий четкого и общего (в примере по четкому условию где дает результата 3 формула даст результата 7 т.к. суппроизв сложит совпадения четкого условия и совпадения условия с "*" а это 3 и 4)

уходя от этгог через МИН() то тоже длинно получится:

Код:
=СУММПРОИЗВ(МИН(ЕСЛИ((СЧЁТЕСЛИ($C35;$C$3:$C$14)*СЧЁТЕСЛИ($D35;$D$3:$D$14)*СЧЁТЕСЛИ($E35;$E$3:$E$14)*СЧЁТЕСЛИ($F35;$F$3:$F$14)*$G$3:$G$14)>0;
(СЧЁТЕСЛИ($C35;$C$3:$C$14)*СЧЁТЕСЛИ($D35;$D$3:$D$14)*СЧЁТЕСЛИ($E35;$E$3:$E$14)*СЧЁТЕСЛИ($F35;$F$3:$F$14)*$G$3:$G$14))))

хотя на пару десяток симовол короче.. на реальной базе просмотрю что будет быстрее работать.
kievlyanin вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Постоянно слетает галочка "автоматически" в "Параметры Excel", "Формулы", "Вычисления в книге" Alexsandrr Microsoft Office Excel 4 19.10.2013 14:22
как задать "мерность" масива и для каждого "измерения" максимальный индекс vova_ Общие вопросы Delphi 5 31.07.2012 22:14
Pascal ABC строки - программа, которая каждую встреченную букву "б" заменяет сочетанием "ку" (использовать модули) Raigo Помощь студентам 6 17.05.2012 15:35
Как создать "динамический" диапазон условия суммирования для формулы? kievlyanin Microsoft Office Excel 13 08.09.2011 13:24
Как "динамически" использовать "DLL" Air Общие вопросы Delphi 7 11.12.2007 21:55