Страницы: 1 2 След.
RSS
Именованные диапазоны в формулах подсчета
 
Доброй ночи всем кому не спится.
Подскажите, пожалуйста, можно ли использовать именованные диапазоны в формулах подсчета (суммирования) и если можно, то как на них ссылаться в этих формулах?
Пытаюсь сосчитать количество значений, удовлетворяющих набору условий.
Причем, в одном из условий значение1 должно удовлетворять не одному значению2, а их группе (размерность группы от 4 до нескольких десятков элементов).
Эту задачу можно решить либо формулой такого вида:
СУММПРОИЗВ((диапазон_условия1=условие1)*((диапазон_условия2=условие1)+(диапазон_условия2=условие2)+(диапазон_условия2=условие3)...))

либо с помощью СУММЕСЛИМН, НО...
если условий диапазона_условия2 несколько десятков, то эти формулы будут очень длинными.
Вот я и подумываю, как бы все эти условия задать, например, именованным диапазоном, чтобы формула имела вид типа

СУММПРОИЗВ((диапазон_условия1=условие1)*(диапазон_условия2=Именованный диапазон условий 1, 2, 3...)

Это реально?
Спасибо.
 
Вот сваял пример, постарался максимально просто изложить суть проблемы.
 
Можно воспользоваться Эксель-"трюком" с транспонированием:
 
Большое спасибо, С.М.
Ваш вариант работает, но есть пара вопросов:
1. Не понял почему надо преобразовывать массив (из вертикального в горизонтальный)
2. Как этот вариант увязать с другими условиями?
При попытке применить Ваши варианты в качестве части формулы
СУММПРОИЗВ((диапазон1=условие1)*(СУММПРОИЗВ(СЧЁТЕСЛИ(Диапазон2;ТРАНСП(Диапазон))))
возвращается неверный результат.
Скорее всего, я просто криво это делаю (пробовал по-разному, результаты разные, но неверные)

Может дело в том, что нельзя в формуле совмещать логические условия с нелогическими?
Поясню: в моем случае с помощью СУММПРОИЗВ проверяется выполнение заданного мной набора условий (Истина/Ложь), т.е. каждый элемент форулы равен либо 1 либо 0, результат перемножения тоже равен 1 или 0.
В результате это дает мне количество элементов, удовлетворяющих всем условиям - что мне и нужно.
Тут же получается, что значение одного из элементов может быть больше 1, следовательно общий результат вычисления формулы тоже может быть больше, чем 1, что не есть хорошо в моем случае.
Понимаю, что коряво изложил, готов ответить на все возникающие вопросы.
 
Пример с пояснениями
 
Пример с разъяснениями
 
С.М., спасибо Вам большое, буду разбираться, как прикрутить это под себя.
После Ваших разъяснений трюк стал понятен, но я не планировал использовать дополнительные ячейки для определения условий (с помощью функций, созданных пользователем). Тут же получается, что сначала в определенных ячейках надо создать формулы для каждого условия, а потом в нужной ячейке эти условия (с помощью умножения) и учитывать.
 
Такой вариант должен быть немного шустрее:
Код
=СЧЁТ(ЕСЛИ(Качество=1;ПОИСКПОЗ(Продукты;Фрукты;)))

Формула массива
 
Цитата
SerjVorotilov пишет:
не планировал использовать дополнительные ячейки для определения условий
Не, и мою формулу тоже можно затолкать в одну ячейку:
=СУММ((Продукты=ТРАНСП(Фрукты))*(Качество=1))
или
=СУММ((B6:B18=ТРАНСП(B21:B23))*(C6:C18=1))
Изменено: С.М. - 23.03.2013 03:39:23
 
kim, С.М., спасибо Вам огромное.
Это именно то, что и было мне так нужно.
Извиняюсь, что отвечаю с задержкой, несколько дней не мог добраться до форума.
Еще раз огромное спасибо всем, кто откликнулся :!:
 
Коллеги, подскажите, пожалуйста, можно ли добавить еще и третье условие в формулу, причем чтобы оно было как и Условие 1, т.е. состояло из нескольких элементов?
По аналогии с разъяснениями С.М. я попытался добавить еще 3 массив, но мои попытки успехом не увенчались. Видимо, эти массивы (1 и 3) должны быть либо одномерными, либо иметь один размер?!
Подробности в файле (добавил столбец Поставщик и критерий Россия. Итоговый массив сделал из 15 столбцов т.к. думал, что они должны перемножаться - 3х5).

Еще хотел попросить объяснить мне как присваивать имена с помощью := и ' $B$6:$B$18 ' (одинарных кавычек). Кто знает, поделитесь ссылкой где почитать про это.
Большое спасибо.
 
=СЧЁТ(ЕСЛИ(ЕСЛИ(ЕЧИСЛО(ПОИСКПОЗ(ЕСЛИ(ЕНД(ПОИСКПОЗ(Поставщик;Россия;0));Продукты);Фрукты;0));Качество)=1;Качество))

формула массива, подойдет?
 
Цитата
SerjVorotilov пишет:
можно ли добавить еще и третье условие в формулу, причем чтобы оно было как и Условие 1, т.е. состояло из нескольких элементов?
Формулы (у меня), возможно, не самые оптимальные.
Цитата
SerjVorotilov пишет:
Еще хотел попросить объяснить мне как присваивать имена с помощью :=
Я пользуюсь надстройкой:
http://www.excelworld.ru/forum/3-782-1
Изменено: С.М. - 31.03.2013 14:45:05
 
Цитата
С.М. пишет:
Я пользуюсь надстройкой:
Я думал, что это и в стандартных опциях Экселя есть. У меня 2010.
За решения огромное спасибо, пытаюсь в них разобраться, не все понятно пока.
Выражение Строка(Диапазон)/Строка(Диапазон) нужно для того, чтобы получить одномерный вертикальный массив? Что, в свою очередь, при умножении на него дает тоже одномерный вертикальный массив с количеством строк как у первого массива?
 
Попробуйте так:
Код
=СУММПРОИЗВ(СЧЁТЕСЛИ(Фрукты;Продукты)*НЕ(СЧЁТЕСЛИ(Россия;Поставщик))*(Качество=1))
 
Я правильно понимаю, что если неодномерный массив с помощью функции МУМНОЖ превращать в одномерный (например, в один столбец), то таким образом можно сколь угодно много условий учитывать?
 
Цитата
DV пишет:
Попробуйте так:

блин, вот здесь сразу почти все понятно! Спасибо.
Почти вот почему: давно хотел задать вопрос как назывется прием, когда вместо диапазона в формулы подставляешь критерий, а вместо критерия - диапазон? Не раз уже встречал это, мож даже и использовал где-то, но так и не спросил. Ведь по логике Продукты и поставщик - это проверяемый диапазон, а Фрукты и Россия - критерий.
 
А также когда его использовать - когда критериев больше одного?
 
SerjVorotilov, ответ на Ваши вопросы в #14 и #16 - да.

То: DV в #13 оговорил, что формулист я не оптимальный  :)
 
С вариантом, предложенным С.М., тоже вроде разобрался, спасибо, т.к. с Вашими объяснениями стал лучше представлять как работать с массивами.
Единственное, для полной ясности хотелось бы понять как перемножаются массивы с разным количеством строк (в последнем примере С.М. массив Поставщик=ТРАНСП(Россия) и массив СТРОКА(Россия)/СТРОКА(Россия))
У первого массива 13 строк, у второго - 5. Первые пять строк понятно (каждое значение первой строки массива умножается на значение первой строки второго, результаты складываются), а начиная с 6 строки первого массива элементы  перемножаются опять на первую строку второго массива и т.д.?
 
Цитата
SerjVorotilov пишет:
как назывется прием
Да никак не называется
Цитата
SerjVorotilov пишет:
А также когда его использовать - когда критериев больше одного?
Когда Вам необходимо получить массив, равный по размеру с критерием в СЧЁТЕСЛИ
Если Вы выделите в формуле СЧЁТЕСЛИ(Фрукты;Продукты) и нажмете F9, то увидите какой массив создается при вычислении.
 
С матрицами в институте проблем не испытывал, но это было уже почти 15 лет назад, напервом курсе вроде.
Подзабылось уже все. Интуитивно понимаю, но уверенности, что так и есть, нет.
Еще обнаружил вот что.
В варианте С.М. не заполненное значение (читай - пустую ячейку) в диапазоне Поставщик трактует как неудовлетворяющую условиям, а вариантах Nic70y и DV - как удовлетворяющую. Т.е. пока не заполнишь ее например Москвой, формула считает, что там не Россия.
Осталось понять, что важнее :D
 
Цитата
DV пишет:
Если Вы выделите в формуле  СЧЁТЕСЛИ(Фрукты;Продукты)  и нажмете  F9 , то увидите какой массив создается при вычислении.
Выделил, но так и не понял(
Если бы у меня вместо Фруктов был один элемент, например, Киви, я бы писал Счетесли(Продукты;Киви) и результат был бы верным
А вот если написать Счетесли(Продукты;Фрукты), то получаем ошибку Н/Д.
 
Цитата
SerjVorotilov пишет:
как перемножаются массивы с разным количеством строк
Правило умножения матриц:
это суммы произведений элементов каждой строки первой матрицы,
на элементы каждого столбца второй матрицы.
Первая, в примере, - 13х5, вторая 5х1, итого: 13х1
 
Забыл (на всякий случай) - Правило умножения матриц - относится только к функции МУМНОЖ()
Изменено: С.М. - 31.03.2013 21:27:39
 
Теперь понял, а сначала думал, что построчно. Спасибо.
 
А с формулой DV - конечно лучше (и быстрее) !
 
аналогично же можно и другие условия в эту формулу добавлять?
Буду пробовать.
Еще раз огромное спасибо всем откликнувшимся.
 
Чем дальше, тем интереснее))) Жизнь подкидывает все новые вопросы...
Нужна помощь с ответами на них.
Можно ли в формуле вида =СУММПРОИЗВ(СЧЁТЕСЛИ(Фрукты;Продукты)*НЕ(СЧЁТЕСЛИ(Россия;Поставщик))*(Качество=1)) использовать в качестве одного из производных функцию MaskCompare? Т.е. проверку значений какого-то одного столбца таблицы по маске?
Вопрос задавался тут http://www.planetaexcel.ru/forum/index.php?PAGE_NAME=message&FID=8&TID=32057&MID=278921#message278921, но, к сожалению, остался без ответа.
Я попробовал так: =СУММПРОИЗВ(((MaskCompare(Таблица1[Столбец1];"*абвг*";0)=1))*(Таблица1[Столбец2]=1))
выдает ошибку ЗНАЧ
Изменено: SerjVorotilov - 16.04.2013 18:11:33
 
Если так:
=СУММПРОИЗВ((СЧЁТЕСЛИ(Таблица1[Столбец1];"*абвг*"))*(Таблица1[Столбец2]=1)),
то выдает неверный результат (считает количество выполнений условия 1 (СЧЁТЕСЛИ(Таблица1[Столбец1];"*абвг*")), количество выполнения услочия 2 (Таблица1[Столбец2]=1), потом умножает эти два числа друг на друга
Страницы: 1 2 След.
Читают тему
Наверх