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

Вход

Регистрация

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

 

= Мир MS Excel/Массивная сумма без вспомогательного массива - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по Excel » Массивная сумма без вспомогательного массива (Формулы/Formulas)
Массивная сумма без вспомогательного массива
$erge Дата: Среда, 18.03.2015, 06:54 | Сообщение № 1
Группа: Пользователи
Ранг: Прохожий
Сообщений: 8
Репутация: 0 ±
Замечаний: 0% ±

Excel 2013
День добрый!

Бьюсь головой об массивную сумму.

Задача 1: есть 2 одномерных массива известного одинакового размера, каждый из которых получается некоторой подтяжкой данных через ВПР. Нужно их друг на друга умножить, а ячейки полученного итогового массива сложить. Через несколько вспомогательных массивов решается элементарно, никаких проблем нет.

Задача 2: решить задачу 1 без использования вспомогательных массивов, т.е. в одной ячейке получить сразу необходимую конечную сумму, применив все необходимые массивные операции.

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

Создал элементарный чисто модельный пример с этой ситуацией. Подскажите, пожалуйста, что не так с моей одноячеечной массивной суммой?
К сообщению приложен файл: 6639270.xls (31.5 Kb)
 
Ответить
СообщениеДень добрый!

Бьюсь головой об массивную сумму.

Задача 1: есть 2 одномерных массива известного одинакового размера, каждый из которых получается некоторой подтяжкой данных через ВПР. Нужно их друг на друга умножить, а ячейки полученного итогового массива сложить. Через несколько вспомогательных массивов решается элементарно, никаких проблем нет.

Задача 2: решить задачу 1 без использования вспомогательных массивов, т.е. в одной ячейке получить сразу необходимую конечную сумму, применив все необходимые массивные операции.

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

Создал элементарный чисто модельный пример с этой ситуацией. Подскажите, пожалуйста, что не так с моей одноячеечной массивной суммой?

Автор - $erge
Дата добавления - 18.03.2015 в 06:54
amfor Дата: Среда, 18.03.2015, 07:05 | Сообщение № 2
Группа: Проверенные
Ранг: Обитатель
Сообщений: 250
Репутация: 75 ±
Замечаний: 0% ±

Excel 2016
Здравствуйте, посмотрите может так?
К сообщению приложен файл: 4240641.xls (32.5 Kb)


Семь бед - один RESET.
 
Ответить
СообщениеЗдравствуйте, посмотрите может так?

Автор - amfor
Дата добавления - 18.03.2015 в 07:05
$erge Дата: Среда, 18.03.2015, 07:11 | Сообщение № 3
Группа: Пользователи
Ранг: Прохожий
Сообщений: 8
Репутация: 0 ±
Замечаний: 0% ±

Excel 2013
посмотрите может так?

Не увидел что изменилось?
 
Ответить
Сообщение
посмотрите может так?

Не увидел что изменилось?

Автор - $erge
Дата добавления - 18.03.2015 в 07:11
amfor Дата: Среда, 18.03.2015, 07:18 | Сообщение № 4
Группа: Проверенные
Ранг: Обитатель
Сообщений: 250
Репутация: 75 ±
Замечаний: 0% ±

Excel 2016
Формула в столбце B


Семь бед - один RESET.
 
Ответить
СообщениеФормула в столбце B

Автор - amfor
Дата добавления - 18.03.2015 в 07:18
$erge Дата: Среда, 18.03.2015, 07:29 | Сообщение № 5
Группа: Пользователи
Ранг: Прохожий
Сообщений: 8
Репутация: 0 ±
Замечаний: 0% ±

Excel 2013
Формула в столбце B

Ааа )) Формула, конечно, работает, равно как и моя массивная сумма по вспомогательному массиву. Но задача в том, чтобы не пользоваться никакими вспомогательными массивами, рассчитанными в первом, втором и третьем действии, а сделать формулу, которая будет считать готовую сумму прямо по исходным данным.
 
Ответить
Сообщение
Формула в столбце B

Ааа )) Формула, конечно, работает, равно как и моя массивная сумма по вспомогательному массиву. Но задача в том, чтобы не пользоваться никакими вспомогательными массивами, рассчитанными в первом, втором и третьем действии, а сделать формулу, которая будет считать готовую сумму прямо по исходным данным.

Автор - $erge
Дата добавления - 18.03.2015 в 07:29
Pelena Дата: Среда, 18.03.2015, 07:53 | Сообщение № 6
Группа: Админы
Ранг: Местный житель
Сообщений: 19195
Репутация: 4423 ±
Замечаний: ±

Excel 365 & Mac Excel
Варианты формул массива
Код
=СУММ(МУМНОЖ(Ч(A12:A17=ТРАНСП(A3:A7));B3:B7)*МУМНОЖ(Ч(F12:F17=ТРАНСП(F3:F7));G3:G7))

Код
=СУММ(Ч(СМЕЩ(B3;ПОИСКПОЗ(A12:A17;A3:A7;0)-1;))*Ч(СМЕЩ(G3;ПОИСКПОЗ(F12:F17;F3:F7;0)-1;)))

немассивная
Код
=СУММПРОИЗВ(Ч(СМЕЩ(B3;ПОИСКПОЗ(A12:A17;A3:A7;0)-1;))*Ч(СМЕЩ(G3;ПОИСКПОЗ(F12:F17;F3:F7;0)-1;)))


"Черт возьми, Холмс! Но как??!!"
Ю-money 41001765434816
 
Ответить
СообщениеВарианты формул массива
Код
=СУММ(МУМНОЖ(Ч(A12:A17=ТРАНСП(A3:A7));B3:B7)*МУМНОЖ(Ч(F12:F17=ТРАНСП(F3:F7));G3:G7))

Код
=СУММ(Ч(СМЕЩ(B3;ПОИСКПОЗ(A12:A17;A3:A7;0)-1;))*Ч(СМЕЩ(G3;ПОИСКПОЗ(F12:F17;F3:F7;0)-1;)))

немассивная
Код
=СУММПРОИЗВ(Ч(СМЕЩ(B3;ПОИСКПОЗ(A12:A17;A3:A7;0)-1;))*Ч(СМЕЩ(G3;ПОИСКПОЗ(F12:F17;F3:F7;0)-1;)))

Автор - Pelena
Дата добавления - 18.03.2015 в 07:53
$erge Дата: Среда, 18.03.2015, 08:02 | Сообщение № 7
Группа: Пользователи
Ранг: Прохожий
Сообщений: 8
Репутация: 0 ±
Замечаний: 0% ±

Excel 2013
Варианты формул массива

Работает! Спасибо, разберусь с этими формулами.
 
Ответить
Сообщение
Варианты формул массива

Работает! Спасибо, разберусь с этими формулами.

Автор - $erge
Дата добавления - 18.03.2015 в 08:02
MCH Дата: Среда, 18.03.2015, 08:07 | Сообщение № 8
Группа: Админы
Ранг: Старожил
Сообщений: 2003
Репутация: 751 ±
Замечаний: ±

можно еще так извратиться:
Код
=СУММПРОИЗВ(ИНДЕКС(B3:B7;Ч(ИНДЕКС(ПОИСКПОЗ(A12:A17;A3:A7;);)));ИНДЕКС(G3:G7;Ч(ИНДЕКС(ПОИСКПОЗ(F12:F17;F3:F7;);))))

или так:
Код
=СУММПРОИЗВ(ВПР(Т(ИНДЕКС(A12:A17&"";));A3:B7;2;);ВПР(Т(ИНДЕКС(F12:F17&"";));F3:G7;2;))
 
Ответить
Сообщениеможно еще так извратиться:
Код
=СУММПРОИЗВ(ИНДЕКС(B3:B7;Ч(ИНДЕКС(ПОИСКПОЗ(A12:A17;A3:A7;);)));ИНДЕКС(G3:G7;Ч(ИНДЕКС(ПОИСКПОЗ(F12:F17;F3:F7;);))))

или так:
Код
=СУММПРОИЗВ(ВПР(Т(ИНДЕКС(A12:A17&"";));A3:B7;2;);ВПР(Т(ИНДЕКС(F12:F17&"";));F3:G7;2;))

Автор - MCH
Дата добавления - 18.03.2015 в 08:07
$erge Дата: Среда, 18.03.2015, 08:29 | Сообщение № 9
Группа: Пользователи
Ранг: Прохожий
Сообщений: 8
Репутация: 0 ±
Замечаний: 0% ±

Excel 2013
А кто-нибудь понял почему моя неправильная массивная сумма, вбитая в 1 ячейку даёт неправильный результат, а будучи размноженной в массив от 2 элементов (неважно в каком количестве) даёт правильный результат?
 
Ответить
СообщениеА кто-нибудь понял почему моя неправильная массивная сумма, вбитая в 1 ячейку даёт неправильный результат, а будучи размноженной в массив от 2 элементов (неважно в каком количестве) даёт правильный результат?

Автор - $erge
Дата добавления - 18.03.2015 в 08:29
$erge Дата: Среда, 18.03.2015, 11:05 | Сообщение № 10
Группа: Пользователи
Ранг: Прохожий
Сообщений: 8
Репутация: 0 ±
Замечаний: 0% ±

Excel 2013
Варианты формул массива

=СУММ(МУМНОЖ(Ч(A12:A17=ТРАНСП(A3:A7));B3:B7)*МУМНОЖ(Ч(F12:F17=ТРАНСП(F3:F7));G3:G7))


Самым удобным вариантом оказалось матричное умножение. Разобрался с МУМНОЖ, понял, что Ч помогает поправить формат (правда не понял что изначально не так было с этим форматом). Пытаюсь применить к своему рабочему файлу. Получается наполовину.

Вычистил из рабочего файла всё лишнее, оставил только нужные ссылки. Обвёл в рамку сам расчёт на листе "Свод"

Смысл следующий. Рассчитываю вспомогательные массив1 и массив2. Считаю их произведение без массивов. Матрично массивно их умножаю, всё ок. В матричном умножении меняю ссылку на массив2 на формулу массива2. Всё ок. В матричном умножении меняю ссылку на массив1 на формулу массива1. Ошибка! Хотя делаю вроде бы всё то же самое, что для массива2. Фунцию Ч пытался переставить в разные места - без толку.
К сообщению приложен файл: 1196321.xlsx (38.4 Kb)
 
Ответить
Сообщение
Варианты формул массива

=СУММ(МУМНОЖ(Ч(A12:A17=ТРАНСП(A3:A7));B3:B7)*МУМНОЖ(Ч(F12:F17=ТРАНСП(F3:F7));G3:G7))


Самым удобным вариантом оказалось матричное умножение. Разобрался с МУМНОЖ, понял, что Ч помогает поправить формат (правда не понял что изначально не так было с этим форматом). Пытаюсь применить к своему рабочему файлу. Получается наполовину.

Вычистил из рабочего файла всё лишнее, оставил только нужные ссылки. Обвёл в рамку сам расчёт на листе "Свод"

Смысл следующий. Рассчитываю вспомогательные массив1 и массив2. Считаю их произведение без массивов. Матрично массивно их умножаю, всё ок. В матричном умножении меняю ссылку на массив2 на формулу массива2. Всё ок. В матричном умножении меняю ссылку на массив1 на формулу массива1. Ошибка! Хотя делаю вроде бы всё то же самое, что для массива2. Фунцию Ч пытался переставить в разные места - без толку.

Автор - $erge
Дата добавления - 18.03.2015 в 11:05
Pelena Дата: Среда, 18.03.2015, 11:27 | Сообщение № 11
Группа: Админы
Ранг: Местный житель
Сообщений: 19195
Репутация: 4423 ±
Замечаний: ±

Excel 365 & Mac Excel
Так и не поняла, какую из предложенных формул Вы пытаетесь использовать?


"Черт возьми, Холмс! Но как??!!"
Ю-money 41001765434816
 
Ответить
СообщениеТак и не поняла, какую из предложенных формул Вы пытаетесь использовать?

Автор - Pelena
Дата добавления - 18.03.2015 в 11:27
MCH Дата: Среда, 18.03.2015, 11:32 | Сообщение № 12
Группа: Админы
Ранг: Старожил
Сообщений: 2003
Репутация: 751 ±
Замечаний: ±

что Ч помогает поправить формат (правда не понял что изначально не так было с этим форматом)

Ч() в формуле с МУМНОЖ(), преобразует логические значения ИСТИНА/ЛОЖЬ на 1/0, т.к. функция МУМНОЖ() не может умножать логические значения


А кто-нибудь понял почему моя неправильная массивная сумма, вбитая в 1 ячейку даёт неправильный результат, а будучи размноженной в массив от 2 элементов (неважно в каком количестве) даёт правильный результат?

Точно не знаю, но могу предположить.
Такие функции, как ВПР, ИНДЕКС (и многие другие) не могут возвращать массив значений, если им подставлять массив аргументов.
Например, ВПР({1;2;3};диапазон;2) не может вернуть массив значений, она возвращает только одно значение, даже если вводится как формула массива в одну ячейку.
Если же ее ввести как формулу массива в несколько ячеек, то срабатывает другой механизм вычислений, и на выходе имеем массивный результат из трех значений.

ВПР, вводимую в одну ячейку можно обмануть, записав формулу как ВПР(Ч(ИНДЕКС({1;2;3};));диапазон;2), при этом расчет ведется, если бы формула вводилась как формула массива в несколько ячеек сразу.
 
Ответить
Сообщение
что Ч помогает поправить формат (правда не понял что изначально не так было с этим форматом)

Ч() в формуле с МУМНОЖ(), преобразует логические значения ИСТИНА/ЛОЖЬ на 1/0, т.к. функция МУМНОЖ() не может умножать логические значения


А кто-нибудь понял почему моя неправильная массивная сумма, вбитая в 1 ячейку даёт неправильный результат, а будучи размноженной в массив от 2 элементов (неважно в каком количестве) даёт правильный результат?

Точно не знаю, но могу предположить.
Такие функции, как ВПР, ИНДЕКС (и многие другие) не могут возвращать массив значений, если им подставлять массив аргументов.
Например, ВПР({1;2;3};диапазон;2) не может вернуть массив значений, она возвращает только одно значение, даже если вводится как формула массива в одну ячейку.
Если же ее ввести как формулу массива в несколько ячеек, то срабатывает другой механизм вычислений, и на выходе имеем массивный результат из трех значений.

ВПР, вводимую в одну ячейку можно обмануть, записав формулу как ВПР(Ч(ИНДЕКС({1;2;3};));диапазон;2), при этом расчет ведется, если бы формула вводилась как формула массива в несколько ячеек сразу.

Автор - MCH
Дата добавления - 18.03.2015 в 11:32
krosav4ig Дата: Среда, 18.03.2015, 13:40 | Сообщение № 13
Группа: Друзья
Ранг: Старожил
Сообщений: 2347
Репутация: 989 ±
Замечаний: 0% ±

Excel 2007,2010,2013
еще вариант немассивная формула
Код
=МУМНОЖ(ПРОСМОТР({"а";"в";"в";"д";"б";"а"};$A$3:$A$7;$B$3:$B$7);ПРОСМОТР({"к":"и":"ж":"ж":"з":"е"};$F$3:$F$7;$G$3:$G$7))
или тоже немассивная
Код
=СУММ(ПРОСМОТР({"а":"в":"в":"д":"б":"а"};$A$3:$A$7;$B$3:$B$7)*ПРОСМОТР({"к":"и":"ж":"ж":"з":"е"};$F$3:$F$7;$G$3:$G$7))


email:krosav4ig26@gmail.com WMR R207627035142 WMZ Z821145374535 ЯД 410012026478460

Сообщение отредактировал krosav4ig - Среда, 18.03.2015, 13:47
 
Ответить
Сообщениееще вариант немассивная формула
Код
=МУМНОЖ(ПРОСМОТР({"а";"в";"в";"д";"б";"а"};$A$3:$A$7;$B$3:$B$7);ПРОСМОТР({"к":"и":"ж":"ж":"з":"е"};$F$3:$F$7;$G$3:$G$7))
или тоже немассивная
Код
=СУММ(ПРОСМОТР({"а":"в":"в":"д":"б":"а"};$A$3:$A$7;$B$3:$B$7)*ПРОСМОТР({"к":"и":"ж":"ж":"з":"е"};$F$3:$F$7;$G$3:$G$7))

Автор - krosav4ig
Дата добавления - 18.03.2015 в 13:40
$erge Дата: Среда, 18.03.2015, 16:27 | Сообщение № 14
Группа: Пользователи
Ранг: Прохожий
Сообщений: 8
Репутация: 0 ±
Замечаний: 0% ±

Excel 2013
Так и не поняла, какую из предложенных формул Вы пытаетесь использовать?

Я пытаюсь использовать массивное матричное умножение. Для моего случая оно идеально подходит. Но как видно из файла, приложенного к сообщению в 11:05 не весь требуемый расчёт удаётся завести в МУМНОЖ().

Такие функции, как ВПР, ИНДЕКС (и многие другие) не могут возвращать массив значений, если им подставлять массив аргументов.

Значит видимо надо вместо ВПР попробовать массивные сравнения, выполняющие по сути то же, что делает ВПР.


Сообщение отредактировал $erge - Среда, 18.03.2015, 16:30
 
Ответить
Сообщение
Так и не поняла, какую из предложенных формул Вы пытаетесь использовать?

Я пытаюсь использовать массивное матричное умножение. Для моего случая оно идеально подходит. Но как видно из файла, приложенного к сообщению в 11:05 не весь требуемый расчёт удаётся завести в МУМНОЖ().

Такие функции, как ВПР, ИНДЕКС (и многие другие) не могут возвращать массив значений, если им подставлять массив аргументов.

Значит видимо надо вместо ВПР попробовать массивные сравнения, выполняющие по сути то же, что делает ВПР.

Автор - $erge
Дата добавления - 18.03.2015 в 16:27
Pelena Дата: Среда, 18.03.2015, 16:33 | Сообщение № 15
Группа: Админы
Ранг: Местный житель
Сообщений: 19195
Репутация: 4423 ±
Замечаний: ±

Excel 365 & Mac Excel
Михаил (MCH) уже объяснил, что функция ВПР в большинстве случаев не возвращает массив, а МУМНОЖ() требует именно массив. Если Вы выделите в строке формул часть с функцией ВПР и нажмете клавишу F9, то увидите, что в первом случае получается массив, а во втором только одно число


"Черт возьми, Холмс! Но как??!!"
Ю-money 41001765434816
 
Ответить
СообщениеМихаил (MCH) уже объяснил, что функция ВПР в большинстве случаев не возвращает массив, а МУМНОЖ() требует именно массив. Если Вы выделите в строке формул часть с функцией ВПР и нажмете клавишу F9, то увидите, что в первом случае получается массив, а во втором только одно число

Автор - Pelena
Дата добавления - 18.03.2015 в 16:33
$erge Дата: Среда, 18.03.2015, 16:41 | Сообщение № 16
Группа: Пользователи
Ранг: Прохожий
Сообщений: 8
Репутация: 0 ±
Замечаний: 0% ±

Excel 2013
Ну я уже понял, что ВПР возвращает число вместо массива. Но опять же во втором моём файле в сообщении 10 от 11:05 очередной пример двойных стандартов обработки данных: подставляю в массивное матричное умножение один массив, полученный через ВПР (а это таки массив) - всё отлично работает. Подставляю другой, полученный через ВПР - не работает, оказывается, что это не массив.

выделите в строке формул часть с функцией ВПР и нажмете клавишу F9, то увидите

Не понял что таким образом можно увидеть?


Сообщение отредактировал $erge - Среда, 18.03.2015, 16:42
 
Ответить
СообщениеНу я уже понял, что ВПР возвращает число вместо массива. Но опять же во втором моём файле в сообщении 10 от 11:05 очередной пример двойных стандартов обработки данных: подставляю в массивное матричное умножение один массив, полученный через ВПР (а это таки массив) - всё отлично работает. Подставляю другой, полученный через ВПР - не работает, оказывается, что это не массив.

выделите в строке формул часть с функцией ВПР и нажмете клавишу F9, то увидите

Не понял что таким образом можно увидеть?

Автор - $erge
Дата добавления - 18.03.2015 в 16:41
Pelena Дата: Среда, 18.03.2015, 16:59 | Сообщение № 17
Группа: Админы
Ранг: Местный житель
Сообщений: 19195
Репутация: 4423 ±
Замечаний: ±

Excel 365 & Mac Excel
что таким образом можно увидеть?

Можно увидеть работу формулы по частям
Вот тут подробнее


"Черт возьми, Холмс! Но как??!!"
Ю-money 41001765434816
 
Ответить
Сообщение
что таким образом можно увидеть?

Можно увидеть работу формулы по частям
Вот тут подробнее

Автор - Pelena
Дата добавления - 18.03.2015 в 16:59
_Boroda_ Дата: Среда, 18.03.2015, 21:46 | Сообщение № 18
Группа: Модераторы
Ранг: Местный житель
Сообщений: 16675
Репутация: 6481 ±
Замечаний: 0% ±

2003; 2007; 2010; 2013 RUS
Ну и еще вариант обычной формулой.
$erge, почти как у Вас с ВПР, логика та же.
Код
=СУММПРОИЗВ(ПРОСМОТР(A12:A17;A3:A7;B3:B7)*ПРОСМОТР(F12:F17;F3:F7;G3:G7))
К сообщению приложен файл: 6639270_1.xls (33.5 Kb)


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
СообщениеНу и еще вариант обычной формулой.
$erge, почти как у Вас с ВПР, логика та же.
Код
=СУММПРОИЗВ(ПРОСМОТР(A12:A17;A3:A7;B3:B7)*ПРОСМОТР(F12:F17;F3:F7;G3:G7))

Автор - _Boroda_
Дата добавления - 18.03.2015 в 21:46
Мир MS Excel » Вопросы и решения » Вопросы по Excel » Массивная сумма без вспомогательного массива (Формулы/Formulas)
  • Страница 1 из 1
  • 1
Поиск:

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