Страницы: 1
RSS
Как просуммировать значения найденные по суммесли на всех листах, с учетом того что кол-во листов будет постоянно добавляться, никак не увязать суммессли и трехмерную ссылку
 
Добрый день
есть формула
Код
=СУММЕСЛИМН('7.09.-13.09.2020'!G$10:G$101;'7.09.-13.09.2020'!B$10:B$101;A2;'7.09.-13.09.2020'!C$10:C$101;B2;'7.09.-13.09.2020'!E$10:E$101;C2)
она считает сумму ячеек по трем условиям, сейчас в ней прописана одна вкладка под названием 7.09.-13.09.2020
Вкладки каждую неделю будут добавляться а переписывать формулу каждый раз, как то не логично.
Кто то на форуме писал попробовать использовать функцию ТДАТА()
Цитата
на деле можно сделать и иначе. Т.к. это формула/функция суммирования - то можно просто добавить в конце функции:
+(ТДАТА()*0)

Т.к. ТДАТА является летучей функцией - она заставит пересчитываться и функцию пользователя. Но на сам результат не повлияет.

но я или запутался в синтаксисе либо руки не из того место постоянно получаю ошибку, есть ли какой-нибудь способ без макроса сделать это формулой, или я просто зря пытаюсь и это невозможно, расскажите кто что знает.
 
Цитата
Sweeft1 написал:
расскажите кто что знает.
нечего рассказывать без примера
Лень двигатель прогресса, доказано!!!
 
Добавил пример, там сейчас формула считает только одну вкладку, пытаюсь сделать чтобы она считала все вкладки которые будут добавляться макросом по заданному условию.
 
суммирует вкладки у которых дата меньше либо равна сегодня по правой границе даты названия листа
Изменено: Сергей - 18.09.2020 16:02:51
Лень двигатель прогресса, доказано!!!
 
Цитата
Sweeft1 написал:
Вкладки каждую неделю будут добавляться
Нужно избавляться безжалостно от такой структуры, когда добавляются новые вкладки. Лучше добавить лишний столбец и хранить всё в одной таблице, в которую и добавлять новые данные.
Нужно также избавляться от объединения ячеек. Для визуализации это красиво, для функций - это плохо.
Всё сложное - не нужно. Всё нужное - просто /М. Т. Калашников/
 
От этого избавиться нельзя, это требования заказчика, и такая таблица ведется вручную на весь объект, просто по своей части хочется максимально автоматизировать, поэтому оформление не обсуждается, к сожалению.

Цитата
суммирует вкладки у которых дата меньше либо равна сегодня по правой границе даты названия листа
не совсем понял как работает, при добавлении или удалении вкладки ничего не меняется, обновление не помогает

может есть смысл накидать кусок в макрос, чтобы он переписывал основную функцию в ячейке каждый раз при добавлении вкладки
 
Цитата
Sweeft1 написал:
может есть смысл накидать кусок в макрос...
А у заказчика нет требований, запрещающих использовать макросы?
Тогда имеет смысл собирать результат в итоговую таблицу макросом или макрофункцией.
Пробегать по всем листам и, если название отличается от "шаблон" и "формулы", суммировать нужные ячейки
Изменено: Михаил Лебедев - 18.09.2020 18:44:35
Всё сложное - не нужно. Всё нужное - просто /М. Т. Калашников/
 
нет на макросы запрета нет)
похоже макрос тогда моя единственная надежда
попробую что нибудь накидать, правда я немного рукожоп, у меня может не заработать
 
Ну может тут помогут... вроде так, честно не проверял результат.
Код
Sub dds()
Application.ScreenUpdating = False
Application.DisplayAlerts = False
Dim sh As Worksheet, sh2 As Worksheet
Dim lr As Long, lr2 As Long, i As Long, k As Long
Set sh = Worksheets("формулы")
lr = sh.Cells(Rows.Count, 1).End(xlUp).Row
sh.Range("D2:F" & lr + 1).ClearContents
For i = 2 To lr
    For Each sh2 In Worksheets
        If sh2.Name <> sh.Name And sh2.Name <> "шаблон" Then
            kol_vo = Application.WorksheetFunction.SumIfs(sh2.Range("G:G"), sh2.Range("B:B"), sh.Cells(i, 1), sh2.Range("C:C"), sh.Cells(i, 2), sh2.Range("E:E"), Cells(i, 3))
            Plan = Application.WorksheetFunction.SumIfs(sh2.Range("H:H"), sh2.Range("B:B"), sh.Cells(i, 1), sh2.Range("C:C"), sh.Cells(i, 2), sh2.Range("E:E"), Cells(i, 3))
            Fakt = Application.WorksheetFunction.SumIfs(sh2.Range("E:E"), sh2.Range("B:B"), sh.Cells(i, 1), sh2.Range("C:C"), sh.Cells(i, 2), sh2.Range("E:E"), Cells(i, 3))
            sh.Cells(i, 4) = sh.Cells(i, 4) + kol_vo
            sh.Cells(i, 5) = sh.Cells(i, 5) + Plan
            sh.Cells(i, 6) = sh.Cells(i, 6) + Fakt
        End If
    Next sh2
Next i
Application.ScreenUpdating = True
Application.DisplayAlerts = True
End Sub



Изменено: Mershik - 18.09.2020 23:04:06
Не бойтесь совершенства. Вам его не достичь.
 
Здравствуйте. Вариант формулами
Код
=ЕСЛИОШИБКА(СУММПРОИЗВ(СУММЕСЛИМН(ДВССЫЛ("'"&$I$1&"'!G10:G1000");ДВССЫЛ("'"&$I$1&"'!B10:B1000");A2;ДВССЫЛ("'"&$I$1&"'!C10:C1000");B2;ДВССЫЛ("'"&$I$1&"'!E10:E1000");C2));"Листа "&$I$1&" нет в этой книге")
 
Цитата
gling написал:
Здравствуйте. Вариант формулами
Код 1=ЕСЛИОШИБКА(СУММПРОИЗВ(СУММЕСЛИМН(ДВССЫЛ("'"&$I$1&"'!G10:G1000");ДВССЫЛ("'"&$I$1&"'!B10:B1000");A2;ДВССЫЛ("'"&$I$1&"'!C10:C1000");B2;ДВССЫЛ("'"&$I$1&"'!E10:E1000");C2));"Листа "&$I$1&" нет в этой книге")
Спасибо, ваш вариант отличный, дополнительно мне не просто нужно вывести значение с каждой вкладки но и просуммировать их.
Взял вашу формулу за основу и без ссылки на "выбор периода" напрямую сослался на значение из списка, при ошибке вывел "0" попробовал просуммировать две ссылки, которые предварительно удалил и добавил, все отлично работает.
Но вот вопрос а если мне надо 100 значений из списка записать в формулу как это сделать без формулы длинной в километр.
 
Цитата
Mershik написал:
Ну может тут помогут... вроде так, честно не проверял результат.
Спасибо, вставил поправил пару ссылок на ячейки и все посчитало очень четко. добавил еще пару листов, этажей, все отлично работает.
От души, спасибо.
Страницы: 1
Наверх