Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Сумма произведений по условиям, диапазоны разной размерности - Мир MS Excel

Старая форма входа
  • Страница 1 из 2
  • 1
  • 2
  • »
Модератор форума: китин, _Boroda_  
Сумма произведений по условиям, диапазоны разной размерности
Lyova Дата: Пятница, 25.10.2024, 16:57 | Сообщение № 1
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 183
Репутация: 0 ±
Замечаний: 0% ±

Excel 2016
Здравствуйте!

Столкнулся с необходимостью выборки данных по условию из двух таблиц с разным размером массивов данных и дальнейшим сложением результатов вычислений. Как ни крутил ни вертел СУММПРОИЗВ() и СУММЕСЛИ() вместе и врозь, к сожалению, ничего не получилось.

Пример во вложенном файле.

Заранее благодарен за помощь!
К сообщению приложен файл: 9628528.xlsx (14.0 Kb)
 
Ответить
СообщениеЗдравствуйте!

Столкнулся с необходимостью выборки данных по условию из двух таблиц с разным размером массивов данных и дальнейшим сложением результатов вычислений. Как ни крутил ни вертел СУММПРОИЗВ() и СУММЕСЛИ() вместе и врозь, к сожалению, ничего не получилось.

Пример во вложенном файле.

Заранее благодарен за помощь!

Автор - Lyova
Дата добавления - 25.10.2024 в 16:57
Hugo Дата: Пятница, 25.10.2024, 17:23 | Сообщение № 2
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3690
Репутация: 790 ±
Замечаний: 0% ±

365
Lyova, Добрый день.
Вы словами напишите что нужно считать.
Кардинально - загнать все источники в модель, по ней и считать.
Стал чуть вникать в ребус -
в январе есть 500 Работа1 - вся посчитана на Должность1, а как же Дложность2? Она дважды ведь тоже эту работу работала!

Если понять логику то думаю проще UDF сочинить.


webmoney: E265281470651 Z422237915069
USDT TRC20: TN8XeEF17o5KPBD9pNwYzNyruycuAc2mVD


Сообщение отредактировал Hugo - Пятница, 25.10.2024, 17:32
 
Ответить
СообщениеLyova, Добрый день.
Вы словами напишите что нужно считать.
Кардинально - загнать все источники в модель, по ней и считать.
Стал чуть вникать в ребус -
в январе есть 500 Работа1 - вся посчитана на Должность1, а как же Дложность2? Она дважды ведь тоже эту работу работала!

Если понять логику то думаю проще UDF сочинить.

Автор - Hugo
Дата добавления - 25.10.2024 в 17:23
Lyova Дата: Пятница, 25.10.2024, 17:27 | Сообщение № 3
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 183
Репутация: 0 ±
Замечаний: 0% ±

Excel 2016
Hugo,

Добрый!
Может Вы не обратили внимание, но я файл приложил - там есть доп. комментарии. Или я в файле непонятно описал?
 
Ответить
СообщениеHugo,

Добрый!
Может Вы не обратили внимание, но я файл приложил - там есть доп. комментарии. Или я в файле непонятно описал?

Автор - Lyova
Дата добавления - 25.10.2024 в 17:27
Hugo Дата: Пятница, 25.10.2024, 17:34 | Сообщение № 4
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3690
Репутация: 790 ±
Замечаний: 0% ±

365
Lyova, как нужно высчитывать я не понял, выше чуть дописал.


webmoney: E265281470651 Z422237915069
USDT TRC20: TN8XeEF17o5KPBD9pNwYzNyruycuAc2mVD
 
Ответить
СообщениеLyova, как нужно высчитывать я не понял, выше чуть дописал.

Автор - Hugo
Дата добавления - 25.10.2024 в 17:34
Hugo Дата: Пятница, 25.10.2024, 18:07 | Сообщение № 5
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3690
Репутация: 790 ±
Замечаний: 0% ±

365
В UDF можно сперва запомнить сколько часов каждой работы записано на каждую должность.
Или/и наоборот - для каждой должности сколько часов каждой работы, что тут наверное удобнее.
Это чтоб затем не бегать в ту базу для каждого значения.
Затем например для Должность1 просматриваем данные за Январь:
видим сумму, видим Работа1
вспоминаем есть ли у этой Должности такая работа
если есть - сколько часов, умножаем-запоминаем
идём дальше
снова сумма, Работа5 - ищем, умножаем, суммируем...
В конце выводим собранное в ячейку M19

Это я больше для себя записал, если позже будет время продолжить. Если приемлима UDF.


webmoney: E265281470651 Z422237915069
USDT TRC20: TN8XeEF17o5KPBD9pNwYzNyruycuAc2mVD
 
Ответить
СообщениеВ UDF можно сперва запомнить сколько часов каждой работы записано на каждую должность.
Или/и наоборот - для каждой должности сколько часов каждой работы, что тут наверное удобнее.
Это чтоб затем не бегать в ту базу для каждого значения.
Затем например для Должность1 просматриваем данные за Январь:
видим сумму, видим Работа1
вспоминаем есть ли у этой Должности такая работа
если есть - сколько часов, умножаем-запоминаем
идём дальше
снова сумма, Работа5 - ищем, умножаем, суммируем...
В конце выводим собранное в ячейку M19

Это я больше для себя записал, если позже будет время продолжить. Если приемлима UDF.

Автор - Hugo
Дата добавления - 25.10.2024 в 18:07
cmivadwot Дата: Пятница, 25.10.2024, 18:31 | Сообщение № 6
Группа: Проверенные
Ранг: Ветеран
Сообщений: 532
Репутация: 97 ±
Замечаний: 0% ±

365
Lyova, суммеслимн() не пробовали?
 
Ответить
СообщениеLyova, суммеслимн() не пробовали?

Автор - cmivadwot
Дата добавления - 25.10.2024 в 18:31
Lyova Дата: Пятница, 25.10.2024, 18:34 | Сообщение № 7
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 183
Репутация: 0 ±
Замечаний: 0% ±

Excel 2016
Hugo,

Честно говоря только от Вас узнал, что такое UDF. Интернет говорит, что это Universal Disk Format. Не очень понимаю в чем суть. Как результат мне нужно получить файл эксель, который буду посылать людям, которые максимум, что умеют - это сложить две клетки.

По сути. Для должности 2 и любой другой не стал писать, поскольку, как я понимаю, там будет аналогичная формула, что и для первой. Поэтому для должности 1 написал простейшими умножить/сложить, чтобы была понятна логика, что нужно получить.
Вначале нужно посчитать трудозатраты конкретной должности по каждой работе из Таблицы 1 (сложив трудозатраты по подработам, составляющим работу). Количество подработ и участие конкретной должности в разных работах может быть разным.

Далее полученные значения по каждой конкретной работе надо умножить на количество работ конкретного типа из Таблицы 2, соответственно. Далее полученные результаты умножения сложить. Таким образом, в результате посчитаем общее количество трудозатрат в часах на выполнение всех работ по каждой конкретной должности.


Сообщение отредактировал Lyova - Пятница, 25.10.2024, 18:36
 
Ответить
СообщениеHugo,

Честно говоря только от Вас узнал, что такое UDF. Интернет говорит, что это Universal Disk Format. Не очень понимаю в чем суть. Как результат мне нужно получить файл эксель, который буду посылать людям, которые максимум, что умеют - это сложить две клетки.

По сути. Для должности 2 и любой другой не стал писать, поскольку, как я понимаю, там будет аналогичная формула, что и для первой. Поэтому для должности 1 написал простейшими умножить/сложить, чтобы была понятна логика, что нужно получить.
Вначале нужно посчитать трудозатраты конкретной должности по каждой работе из Таблицы 1 (сложив трудозатраты по подработам, составляющим работу). Количество подработ и участие конкретной должности в разных работах может быть разным.

Далее полученные значения по каждой конкретной работе надо умножить на количество работ конкретного типа из Таблицы 2, соответственно. Далее полученные результаты умножения сложить. Таким образом, в результате посчитаем общее количество трудозатрат в часах на выполнение всех работ по каждой конкретной должности.

Автор - Lyova
Дата добавления - 25.10.2024 в 18:34
Lyova Дата: Пятница, 25.10.2024, 18:39 | Сообщение № 8
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 183
Репутация: 0 ±
Замечаний: 0% ±

Excel 2016
cmivadwot,

Пробовал, но, наверное, как-то неправильно. Моя проблема в том что мне нужно сложить, но предварительно перемножив. И то и другое надо сделать по критерию.


Сообщение отредактировал Lyova - Пятница, 25.10.2024, 18:40
 
Ответить
Сообщениеcmivadwot,

Пробовал, но, наверное, как-то неправильно. Моя проблема в том что мне нужно сложить, но предварительно перемножив. И то и другое надо сделать по критерию.

Автор - Lyova
Дата добавления - 25.10.2024 в 18:39
Hugo Дата: Пятница, 25.10.2024, 18:41 | Сообщение № 9
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3690
Репутация: 790 ±
Замечаний: 0% ±

365
Lyova, нужно так искать:

Если файл отдавать другим без замены формул на значения - тогда придётся отдавать с включенными макросами, что может быть проблемой.


webmoney: E265281470651 Z422237915069
USDT TRC20: TN8XeEF17o5KPBD9pNwYzNyruycuAc2mVD
 
Ответить
СообщениеLyova, нужно так искать:

Если файл отдавать другим без замены формул на значения - тогда придётся отдавать с включенными макросами, что может быть проблемой.

Автор - Hugo
Дата добавления - 25.10.2024 в 18:41
cmivadwot Дата: Пятница, 25.10.2024, 18:47 | Сообщение № 10
Группа: Проверенные
Ранг: Ветеран
Сообщений: 532
Репутация: 97 ±
Замечаний: 0% ±

365
Lyova, чет типа того но надо.. все учесть.. пока нет времени
К сообщению приложен файл: 4589882.xlsx (14.7 Kb)
 
Ответить
СообщениеLyova, чет типа того но надо.. все учесть.. пока нет времени

Автор - cmivadwot
Дата добавления - 25.10.2024 в 18:47
Lyova Дата: Пятница, 25.10.2024, 19:13 | Сообщение № 11
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 183
Репутация: 0 ±
Замечаний: 0% ±

Excel 2016
cmivadwot, cmivadwot,
Нет, не так. Вы учитываете только конкретные ячейки М5 и М7 (т.е. только для конкретных работ 2 и 5), а надо весь диапазон М5:Mn. В оригинальном файле количество работ 200. Я поэтому и в примере диапазоны и обозначил последним элементом с индексом N. Просто в примере нет смысла указывать все 200 работ если логика формулы для каждой из них будет одинаковая. Т.е. конкретная должность может встретиться и в подработах для работы, например, 74, 96, 115 и т.д.
 
Ответить
Сообщениеcmivadwot, cmivadwot,
Нет, не так. Вы учитываете только конкретные ячейки М5 и М7 (т.е. только для конкретных работ 2 и 5), а надо весь диапазон М5:Mn. В оригинальном файле количество работ 200. Я поэтому и в примере диапазоны и обозначил последним элементом с индексом N. Просто в примере нет смысла указывать все 200 работ если логика формулы для каждой из них будет одинаковая. Т.е. конкретная должность может встретиться и в подработах для работы, например, 74, 96, 115 и т.д.

Автор - Lyova
Дата добавления - 25.10.2024 в 19:13
Lyova Дата: Пятница, 25.10.2024, 19:18 | Сообщение № 12
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 183
Репутация: 0 ±
Замечаний: 0% ±

Excel 2016
Hugo, Как вариант, конечно. Но мне кажется на крайний случай. Я просто уверен, что это можно реализовать функциями. Наверняка, можно как-то массивными функциями. Я ими пользуюсь, но чаще уже проверенными и не до конца понимаю логику работы той или иной функции, когда она массивная.
 
Ответить
СообщениеHugo, Как вариант, конечно. Но мне кажется на крайний случай. Я просто уверен, что это можно реализовать функциями. Наверняка, можно как-то массивными функциями. Я ими пользуюсь, но чаще уже проверенными и не до конца понимаю логику работы той или иной функции, когда она массивная.

Автор - Lyova
Дата добавления - 25.10.2024 в 19:18
Hugo Дата: Пятница, 25.10.2024, 19:22 | Сообщение № 13
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3690
Репутация: 790 ±
Замечаний: 0% ±

365
Lyova, вот готова UDF. Для Windows only пока.
Месяц не ищется, это зависит как укажете диапазон.
Жёлтую можно тянуть как обычно по таблице.
Можно что-то в коде дописать, например вернуть нули ))
К сообщению приложен файл: UDFRabota.xlsm (23.3 Kb)


webmoney: E265281470651 Z422237915069
USDT TRC20: TN8XeEF17o5KPBD9pNwYzNyruycuAc2mVD
 
Ответить
СообщениеLyova, вот готова UDF. Для Windows only пока.
Месяц не ищется, это зависит как укажете диапазон.
Жёлтую можно тянуть как обычно по таблице.
Можно что-то в коде дописать, например вернуть нули ))

Автор - Hugo
Дата добавления - 25.10.2024 в 19:22
Lyova Дата: Суббота, 26.10.2024, 13:38 | Сообщение № 14
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 183
Репутация: 0 ±
Замечаний: 0% ±

Excel 2016
Hugo,
Скопировал Вашу формулу в оригинальный файл, протестировал. Все супер, работает как надо. Спасибо огромное!

Единственный ньюанс. Только поймите меня правильно, я не придираюсь.

Ваше решение очень узкоспециализированное, для конкретного случая (С моей колокольни). Если бы это были стандартные формулы, то, если бы вводные данные немного поменялись, например, добавилась бы еще одна таблица с исходными данными, то я уверен, что разобрался бы как модернизировать формулу самостоятельно.
Я пользуюсь макрорекордером, убирая весь мусор, который он пишет, могу писать простейшие циклы, но как работает Ваш макрос я не понимаю в принципе. Т.е. ваше решение для очень-очень продвинутых юзеров, коих здесь на сайте, думаю, не большая доля.

В любом случае, еще раз, огромное спасибо!
 
Ответить
СообщениеHugo,
Скопировал Вашу формулу в оригинальный файл, протестировал. Все супер, работает как надо. Спасибо огромное!

Единственный ньюанс. Только поймите меня правильно, я не придираюсь.

Ваше решение очень узкоспециализированное, для конкретного случая (С моей колокольни). Если бы это были стандартные формулы, то, если бы вводные данные немного поменялись, например, добавилась бы еще одна таблица с исходными данными, то я уверен, что разобрался бы как модернизировать формулу самостоятельно.
Я пользуюсь макрорекордером, убирая весь мусор, который он пишет, могу писать простейшие циклы, но как работает Ваш макрос я не понимаю в принципе. Т.е. ваше решение для очень-очень продвинутых юзеров, коих здесь на сайте, думаю, не большая доля.

В любом случае, еще раз, огромное спасибо!

Автор - Lyova
Дата добавления - 26.10.2024 в 13:38
Lyova Дата: Суббота, 26.10.2024, 13:41 | Сообщение № 15
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 183
Репутация: 0 ±
Замечаний: 0% ±

Excel 2016
Hugo,
Для Windows only пока.

Я правильно понимаю, что в экселе на маке эта формула работать не будет?
 
Ответить
СообщениеHugo,
Для Windows only пока.

Я правильно понимаю, что в экселе на маке эта формула работать не будет?

Автор - Lyova
Дата добавления - 26.10.2024 в 13:41
Lyova Дата: Суббота, 26.10.2024, 14:39 | Сообщение № 16
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 183
Репутация: 0 ±
Замечаний: 0% ±

Excel 2016
Hugo,
И просьба - поменяйте, пожалуйста, код, чтобы при нулевых значениях результатов расчетов на экране отражался "0", а не "пусто".
 
Ответить
СообщениеHugo,
И просьба - поменяйте, пожалуйста, код, чтобы при нулевых значениях результатов расчетов на экране отражался "0", а не "пусто".

Автор - Lyova
Дата добавления - 26.10.2024 в 14:39
Hugo Дата: Суббота, 26.10.2024, 17:38 | Сообщение № 17
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3690
Репутация: 790 ±
Замечаний: 0% ±

365
Я правильно понимаю, что в экселе на маке эта формула работать не будет?

да, так не будет. Но можно дописать класс и будет.
Про "поменялась таблица" - специально придумывал названия аргументов, вроде понятно...
Три первых берёте из первой таблицы Таблица 1. Трудозатраты, специально делал три отдельных диапазона (с допстолбцом!) чтоб можно было их в любом порядке и не рядом брать.
Следующие два столбца из Таблица 2. План выполннения работ, шт.
и последний аргумент - Должность к которой нужно всё это подтянуть.

По нулям - сделайте коррекцию последней строки кода так:
[vba]
Код

'If itogo Then
Rabota = itogo 'Else Rabota = ""
[/vba]
Т.е. должно работать только
Rabota = itogo


webmoney: E265281470651 Z422237915069
USDT TRC20: TN8XeEF17o5KPBD9pNwYzNyruycuAc2mVD


Сообщение отредактировал Hugo - Суббота, 26.10.2024, 17:46
 
Ответить
Сообщение
Я правильно понимаю, что в экселе на маке эта формула работать не будет?

да, так не будет. Но можно дописать класс и будет.
Про "поменялась таблица" - специально придумывал названия аргументов, вроде понятно...
Три первых берёте из первой таблицы Таблица 1. Трудозатраты, специально делал три отдельных диапазона (с допстолбцом!) чтоб можно было их в любом порядке и не рядом брать.
Следующие два столбца из Таблица 2. План выполннения работ, шт.
и последний аргумент - Должность к которой нужно всё это подтянуть.

По нулям - сделайте коррекцию последней строки кода так:
[vba]
Код

'If itogo Then
Rabota = itogo 'Else Rabota = ""
[/vba]
Т.е. должно работать только
Rabota = itogo

Автор - Hugo
Дата добавления - 26.10.2024 в 17:38
Lyova Дата: Суббота, 26.10.2024, 18:50 | Сообщение № 18
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 183
Репутация: 0 ±
Замечаний: 0% ±

Excel 2016
Hugo,
Вы не обратили внимание, я написал не "поменялась таблица", а поменялись данные и таблица "добавилась", т.е. стало не 2 исходные таблицы, а, например, 3. С массивами, которые нужно указывать в вашей формуле проблем нет, все понятно. Насколько я понимаю, если добавиться еще одна таблица, например, аналогичная таблице 1, то просто надо добавить в макрос еще один цикл For, аналогичный первому в макросе?


'If itogo Then
Rabota = itogo 'Else Rabota = ""

Дак равно этот код у Вас и есть. Я поменял конец на Else Rabota = 0, вроде стало работать.

Но можно дописать класс и будет.

Это сложно сделать?
 
Ответить
СообщениеHugo,
Вы не обратили внимание, я написал не "поменялась таблица", а поменялись данные и таблица "добавилась", т.е. стало не 2 исходные таблицы, а, например, 3. С массивами, которые нужно указывать в вашей формуле проблем нет, все понятно. Насколько я понимаю, если добавиться еще одна таблица, например, аналогичная таблице 1, то просто надо добавить в макрос еще один цикл For, аналогичный первому в макросе?


'If itogo Then
Rabota = itogo 'Else Rabota = ""

Дак равно этот код у Вас и есть. Я поменял конец на Else Rabota = 0, вроде стало работать.

Но можно дописать класс и будет.

Это сложно сделать?

Автор - Lyova
Дата добавления - 26.10.2024 в 18:50
gling Дата: Суббота, 26.10.2024, 19:15 | Сообщение № 19
Группа: Друзья
Ранг: Участник клуба
Сообщений: 2563
Репутация: 706 ±
Замечаний: 0% ±

2010
Здравствуйте.
Попробуйте формулу массива
Код
=СУММ((($D$5:$D$32=$L20)*$C$5:$C$32)*(($F$5:$F$32=ТРАНСП($L$5:$L$10))*ТРАНСП(M$5:M$10)))
К сообщению приложен файл: 7638717.xlsx (14.8 Kb)


ЯД-41001506838083
 
Ответить
СообщениеЗдравствуйте.
Попробуйте формулу массива
Код
=СУММ((($D$5:$D$32=$L20)*$C$5:$C$32)*(($F$5:$F$32=ТРАНСП($L$5:$L$10))*ТРАНСП(M$5:M$10)))

Автор - gling
Дата добавления - 26.10.2024 в 19:15
Lyova Дата: Суббота, 26.10.2024, 20:07 | Сообщение № 20
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 183
Репутация: 0 ±
Замечаний: 0% ±

Excel 2016
gling,
Здравствуйте!
Протестировал, все отлично работает. Большое спасибо!
 
Ответить
Сообщениеgling,
Здравствуйте!
Протестировал, все отлично работает. Большое спасибо!

Автор - Lyova
Дата добавления - 26.10.2024 в 20:07
  • Страница 1 из 2
  • 1
  • 2
  • »
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!