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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 20.05.2010, 15:09   #1
skivpokemon
Новичок
Джуниор
 
Регистрация: 19.05.2010
Сообщений: 2
По умолчанию Суммирование ячеек с заданного диапазона листов

Добрый день всем.

Встала задача суммировать ячейки с диапазона листов, который задается выпадающими списками.

вроде бы с этим справляется СУММ
=СУММ(Лист2:Лист14!A2:A15)

Но никак не получается подставить выбранные листы в СУММ.
Пробовал через СМЕЩ построить выражение вида (подставляя в ячейки Е17, G17 необходимые листы)
=СУММ(СМЕЩ(E17;0;0;1;1):СМЕЩ(G17;0; 0;1;1)!А2:А15)
но тщетно.

Возможно ли вообще решение задачи только функциями excel?
skivpokemon вне форума Ответить с цитированием
Старый 20.05.2010, 15:26   #2
vikttur
Участник клуба
 
Регистрация: 16.05.2010
Сообщений: 1,249
По умолчанию

Функция ДВССЫЛ()
vikttur вне форума Ответить с цитированием
Старый 20.05.2010, 15:28   #3
The_Prist
Участник клуба
 
Аватар для The_Prist
 
Регистрация: 17.07.2009
Сообщений: 1,088
По умолчанию

Цитата:
Сообщение от vikttur Посмотреть сообщение
Функция ДВССЫЛ()
И неправильно! Виктор, уж Вы-то знаете, что ДВССЫЛ не работает с трехмерными ссылками.
Мое мнение - проще процедурой или функцией пользователя.
WebMoney - R298726502453; Яндекс.Деньги - 41001332272872
www.excel-vba.ru
The_Prist вне форума Ответить с цитированием
Старый 20.05.2010, 15:29   #4
vikttur
Участник клуба
 
Регистрация: 16.05.2010
Сообщений: 1,249
По умолчанию

YНе дописал. Приблизительно так:
=СУММ(ДВССЫЛ(E17&":"&G17&"!А2:А15") )
vikttur вне форума Ответить с цитированием
Старый 20.05.2010, 15:32   #5
vikttur
Участник клуба
 
Регистрация: 16.05.2010
Сообщений: 1,249
По умолчанию

Цитата:
Сообщение от The_Prist Посмотреть сообщение
И неправильно! Виктор, уж Вы-то знаете...
Забыл и покраснел от стыда
vikttur вне форума Ответить с цитированием
Старый 20.05.2010, 15:45   #6
The_Prist
Участник клуба
 
Аватар для The_Prist
 
Регистрация: 17.07.2009
Сообщений: 1,088
По умолчанию

Вот. Элементарная функция пользователя:
Код:
Function Summ_Few_Sheets(Начальный_лист As Range, Последний_лист As Range, Диапазон_Суммирования As Range) As Double
Summ_Few_Sheets = Evaluate("=Sum('" & Начальный_лист.Value & ":" & Последний_лист.Value & "'!" & Диапазон_Суммирования.Address & ")")
End Function
Начальный_лист - ссылка на ячейку с именем первого листа
Последний_лист - ссылка на ячейку с именем последнего листа
Диапазон_Суммирования - выделяете диапазон на листе, ячейки которого необходимо суммировать на указанных листах.

Создаете новый стандартный модуль, вставляете в него приведенный код. в диспетчере функций впоявиться категория - Определенные пользователем, а в ней эта функция - Summ_Few_Sheets.

Для работы функции необходимо разрешить работу макросов.
WebMoney - R298726502453; Яндекс.Деньги - 41001332272872
www.excel-vba.ru
The_Prist вне форума Ответить с цитированием
Старый 20.05.2010, 16:00   #7
skivpokemon
Новичок
Джуниор
 
Регистрация: 19.05.2010
Сообщений: 2
По умолчанию

vicctur ДВССЫЛ() как раз попробовал с тем же успехом, я и не знал что она не работает с трёхмерными ссылками.

The_Prist большое спасибо, сейчас попробую.

Как я понимаю решение без применения макроса, если и есть, очень громоздкое?
skivpokemon вне форума Ответить с цитированием
Старый 20.05.2010, 16:07   #8
The_Prist
Участник клуба
 
Аватар для The_Prist
 
Регистрация: 17.07.2009
Сообщений: 1,088
По умолчанию

Цитата:
Сообщение от skivpokemon Посмотреть сообщение
Как я понимаю решение без применения макроса, если и есть, очень громоздкое?
Да. Получиться нечто вроде того, что тупо перечислять все необходимые листы в СУММ.
WebMoney - R298726502453; Яндекс.Деньги - 41001332272872
www.excel-vba.ru
The_Prist вне форума Ответить с цитированием
Старый 21.05.2010, 11:26   #9
mchip
Форумчанин
 
Регистрация: 24.06.2008
Сообщений: 516
По умолчанию Решение есть


Вот такая формула все считает:
Код:
=СУММПРОИЗВ(--Ч(ДВССЫЛ("Лист"&СТРОКА(ДВССЫЛ(A1))&"!A2")))
Если в ячейку A1 вводить значения ну например 1:3 считает (с 1 по 3 лист) или 1:14 (с 1 по 14 лист) сумму ячеек А2
Можно сделать все! Было бы время, да деньги...

Последний раз редактировалось mchip; 21.05.2010 в 11:46. Причина: Ошибка
mchip вне форума Ответить с цитированием
Старый 21.05.2010, 11:52   #10
The_Prist
Участник клуба
 
Аватар для The_Prist
 
Регистрация: 17.07.2009
Сообщений: 1,088
По умолчанию

Выход, конечно, но имеет и ряд своих ограничений:
  • все листы должны иметь одинаковый префикс(в данном случае "Лист").Если где-то внутри выбранного диапазона листов будет лист с другим префиксом - #ССЫЛКА!;
  • невозможность указать префикс листа в самой ячейке, из которой берется значение.

Больше всего меня самого смущает именно первый пункт, т.к. многие при работе с листами стараются давать им более осмысленные имена, нежели стандартные(я не исключение).
Но сама формула хорошая, многим пригодится, я думаю. Можно её и чуть подправить:
Код:
=СУММПРОИЗВ(--Ч(ДВССЫЛ("Лист"&СТРОКА(ДВССЫЛ(A1&":"&B1))&"!A2:A15")))
Тогда номер первого листа в ячейке А1, номер второго в В1.
WebMoney - R298726502453; Яндекс.Деньги - 41001332272872
www.excel-vba.ru
The_Prist вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Суммирование заданного количества цифр fs444 Общие вопросы C/C++ 7 01.02.2010 17:43
Суммирование НЕ диапазона, а конкретный ячеейк через VBA Артур Иваныч Microsoft Office Excel 8 23.11.2009 11:49
Проверка диапазона ячеек Last Microsoft Office Excel 9 16.08.2009 19:19
суммирование ячеек =) peq Microsoft Office Excel 3 08.05.2009 13:24