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

Вход

Регистрация

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

 

= Мир MS Excel/Разделить два массива и просуммировать по условию - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Разделить два массива и просуммировать по условию
dadmarat Дата: Пятница, 17.01.2014, 15:43 | Сообщение № 1
Группа: Пользователи
Ранг: Новичок
Сообщений: 47
Репутация: 3 ±
Замечаний: 0% ±

Excel 2010
Есть два массива, которые нужно разделить каждый элемент разделить на соответсвующий другому массиву и просумировать результаты. Подошла бы функция
Код
СУММПРОИЗВ()
, но елементы, на которые делим, могут быть "" или 0 и тогда данная функция выдает ошибку деления на ноль.
Нашел решения черер формулу массива
Код
{=СУММ(ЕСЛИ(("массив2")<>0;("массив1")/("массив2")))}
,
но где-то видел решение такой же проблемы через функцию СУММПРОИЗВ.
Как я понял, данная функция иммет дополнительные возможности не описаные в базовых синтаксисах.

Файл пример приолагаю, вдруг понадобится.
К сообщению приложен файл: 4672038.xlsx (9.6 Kb)


----------------
I can do it!
----------------
 
Ответить
СообщениеЕсть два массива, которые нужно разделить каждый элемент разделить на соответсвующий другому массиву и просумировать результаты. Подошла бы функция
Код
СУММПРОИЗВ()
, но елементы, на которые делим, могут быть "" или 0 и тогда данная функция выдает ошибку деления на ноль.
Нашел решения черер формулу массива
Код
{=СУММ(ЕСЛИ(("массив2")<>0;("массив1")/("массив2")))}
,
но где-то видел решение такой же проблемы через функцию СУММПРОИЗВ.
Как я понял, данная функция иммет дополнительные возможности не описаные в базовых синтаксисах.

Файл пример приолагаю, вдруг понадобится.

Автор - dadmarat
Дата добавления - 17.01.2014 в 15:43
китин Дата: Пятница, 17.01.2014, 15:57 | Сообщение № 2
Группа: Модераторы
Ранг: Экселист
Сообщений: 7029
Репутация: 1078 ±
Замечаний: 0% ±

Excel 2007;2010;2016
ну дык почти так же.формула массива
Код
=СУММПРОИЗВ((ЕСЛИ((B2:B18)<>0;(A2:A18)/(B2:B18))))


Не судите очень строго:я пытаюсь научиться
ЯД 41001877306852


Сообщение отредактировал китин - Пятница, 17.01.2014, 15:57
 
Ответить
Сообщениену дык почти так же.формула массива
Код
=СУММПРОИЗВ((ЕСЛИ((B2:B18)<>0;(A2:A18)/(B2:B18))))

Автор - китин
Дата добавления - 17.01.2014 в 15:57
dadmarat Дата: Пятница, 17.01.2014, 16:00 | Сообщение № 3
Группа: Пользователи
Ранг: Новичок
Сообщений: 47
Репутация: 3 ±
Замечаний: 0% ±

Excel 2010
Возможно есть решение, где СУММПРОИЗВ вводится, как обычная формула и там условия через * вводилось? Синтаксис подходящий найти не могу.

Или я, возможно, ошибаюсь.


----------------
I can do it!
----------------
 
Ответить
СообщениеВозможно есть решение, где СУММПРОИЗВ вводится, как обычная формула и там условия через * вводилось? Синтаксис подходящий найти не могу.

Или я, возможно, ошибаюсь.

Автор - dadmarat
Дата добавления - 17.01.2014 в 16:00
dadmarat Дата: Пятница, 17.01.2014, 17:00 | Сообщение № 4
Группа: Пользователи
Ранг: Новичок
Сообщений: 47
Репутация: 3 ±
Замечаний: 0% ±

Excel 2010
Нашел вот такой вот синтаксис :
Код
=СУММПРОИЗВ((условие1)*(условие2)*(что_суммировать))

Как я понимаю, он не применим в данных условиях. Она суммирует диапазон по нескольким условиям, а не суммирует произведение по условиям.


----------------
I can do it!
----------------
 
Ответить
СообщениеНашел вот такой вот синтаксис :
Код
=СУММПРОИЗВ((условие1)*(условие2)*(что_суммировать))

Как я понимаю, он не применим в данных условиях. Она суммирует диапазон по нескольким условиям, а не суммирует произведение по условиям.

Автор - dadmarat
Дата добавления - 17.01.2014 в 17:00
Pelena Дата: Пятница, 17.01.2014, 17:37 | Сообщение № 5
Группа: Админы
Ранг: Местный житель
Сообщений: 19401
Репутация: 4549 ±
Замечаний: ±

Excel 365 & Mac Excel
Вариант с СУММПРОИЗВ() не массивная
Код
=СУММПРОИЗВ(((B2:B18<>0)*A2:A18)/((B2:B18=0)+B2:B18))


"Черт возьми, Холмс! Но как??!!"
Ю-money 41001765434816
 
Ответить
СообщениеВариант с СУММПРОИЗВ() не массивная
Код
=СУММПРОИЗВ(((B2:B18<>0)*A2:A18)/((B2:B18=0)+B2:B18))

Автор - Pelena
Дата добавления - 17.01.2014 в 17:37
AndreTM Дата: Пятница, 17.01.2014, 17:46 | Сообщение № 6
Группа: Друзья
Ранг: Старожил
Сообщений: 1762
Репутация: 501 ±
Замечаний: 0% ±

2003 & 2010
Пока собирался ответить - Лена опередила :)
Только одни скобки - лишние:
Код
=СУММПРОИЗВ((B1:B9<>0)*A1:A9/((B1:B9=0)+B1:B9))


Как работает:
+ в условиях это аналог ИЛИ (как * - аналог И).
Таким образом:
- Чтобы в знаменателе было либо само значение из второго массива, либо не ноль (чтобы не было ошибки деления). Мы сравниваем элемент с нулём и получаем массив, где на "ненулевых" местах стоят нули, а на "нулевых" - единички. Если теперь сложить этот массив с исходным = то получим массив, где нули заменены на единички.
- Чтобы формула не учитывала те значения из второго массива, где мы заменили нули на единички - мы домножаем числитель на ноль для этих значений. Вернее, мы домножаем числитель на единичку для тех значений, которые нужно учитывать, и на ноль - для тех, которые не нужно. В результате в числителе мы имеем массив из значений, которые нужно поделить, и нулей.
- После этого мы либо делим число на число, либо ноль на единичку :) , а затем складываем результаты...


Skype: andre.tm.007
Donate: Qiwi: 9517375010


Сообщение отредактировал AndreTM - Пятница, 17.01.2014, 17:55
 
Ответить
СообщениеПока собирался ответить - Лена опередила :)
Только одни скобки - лишние:
Код
=СУММПРОИЗВ((B1:B9<>0)*A1:A9/((B1:B9=0)+B1:B9))


Как работает:
+ в условиях это аналог ИЛИ (как * - аналог И).
Таким образом:
- Чтобы в знаменателе было либо само значение из второго массива, либо не ноль (чтобы не было ошибки деления). Мы сравниваем элемент с нулём и получаем массив, где на "ненулевых" местах стоят нули, а на "нулевых" - единички. Если теперь сложить этот массив с исходным = то получим массив, где нули заменены на единички.
- Чтобы формула не учитывала те значения из второго массива, где мы заменили нули на единички - мы домножаем числитель на ноль для этих значений. Вернее, мы домножаем числитель на единичку для тех значений, которые нужно учитывать, и на ноль - для тех, которые не нужно. В результате в числителе мы имеем массив из значений, которые нужно поделить, и нулей.
- После этого мы либо делим число на число, либо ноль на единичку :) , а затем складываем результаты...

Автор - AndreTM
Дата добавления - 17.01.2014 в 17:46
dadmarat Дата: Пятница, 17.01.2014, 17:47 | Сообщение № 7
Группа: Пользователи
Ранг: Новичок
Сообщений: 47
Репутация: 3 ±
Замечаний: 0% ±

Excel 2010
Pelena, AndreTM, спасибо. Правда не совсем понятно, как работает. Если можете напишите, пожалуйста, синтаксис/алгоритм работы данной формулы.


----------------
I can do it!
----------------


Сообщение отредактировал dadmarat - Пятница, 17.01.2014, 17:48
 
Ответить
СообщениеPelena, AndreTM, спасибо. Правда не совсем понятно, как работает. Если можете напишите, пожалуйста, синтаксис/алгоритм работы данной формулы.

Автор - dadmarat
Дата добавления - 17.01.2014 в 17:47
Pelena Дата: Пятница, 17.01.2014, 17:57 | Сообщение № 8
Группа: Админы
Ранг: Местный житель
Сообщений: 19401
Репутация: 4549 ±
Замечаний: ±

Excel 365 & Mac Excel
Если элемент второго массива не равен нулю, B2:B18<>0 даёт ИСТИНА, т.е. 1, а B2:B18=0 даёт ЛОЖЬ, т.е. 0. В итоге эти значения ни на что не влияют. Если же элемент второго массива равен нулю, то все наоборот, в итоге получаем 0/1, т.е. 0

Чтобы посмотреть работу формулы по частям, можно выделить часть формулы в строке формул и нажать F9. Чтобы вернуть прежний вид формулы ESC


"Черт возьми, Холмс! Но как??!!"
Ю-money 41001765434816
 
Ответить
СообщениеЕсли элемент второго массива не равен нулю, B2:B18<>0 даёт ИСТИНА, т.е. 1, а B2:B18=0 даёт ЛОЖЬ, т.е. 0. В итоге эти значения ни на что не влияют. Если же элемент второго массива равен нулю, то все наоборот, в итоге получаем 0/1, т.е. 0

Чтобы посмотреть работу формулы по частям, можно выделить часть формулы в строке формул и нажать F9. Чтобы вернуть прежний вид формулы ESC

Автор - Pelena
Дата добавления - 17.01.2014 в 17:57
dadmarat Дата: Пятница, 17.01.2014, 18:03 | Сообщение № 9
Группа: Пользователи
Ранг: Новичок
Сообщений: 47
Репутация: 3 ±
Замечаний: 0% ±

Excel 2010
+ в условиях это аналог ИЛИ (как * - аналог И).

Именно, то что я хотел услышать.
Чтобы посмотреть работу формулы по частям, можно выделить часть формулы в строке формул и нажать F9. Чтобы вернуть прежний вид формулы ESC

Так же этого не знал.

Спасибо, за участие. Много что стало на свои места.


----------------
I can do it!
----------------
 
Ответить
Сообщение
+ в условиях это аналог ИЛИ (как * - аналог И).

Именно, то что я хотел услышать.
Чтобы посмотреть работу формулы по частям, можно выделить часть формулы в строке формул и нажать F9. Чтобы вернуть прежний вид формулы ESC

Так же этого не знал.

Спасибо, за участие. Много что стало на свои места.

Автор - dadmarat
Дата добавления - 17.01.2014 в 18:03
  • Страница 1 из 1
  • 1
Поиск:

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