Страницы: 1
RSS
Сумма ячейки на разных листах с возможность задать диапазон листов
 
Добрый день!

Созданы вкладки с названиями с 01 до 31 по количеству дней в месяце. Все вкладки идентичны. Необходимо суммировать значения в одинаковых ячейках разных вкладок, но диапазон суммирования задать начальной и конечной датой.
Использование ДВССЫЛ прекрасно работает на одну ячейку, например, =ДВССЫЛ("'"&ТЕКСТ($B$1;"ДД")&"'"&"!B2"), а также с заранее известными листами, но суммировать по произвольно задаваемому диапазону листов, как я понял, ДВССЫЛ не умеет.

Как можно решить данный вопрос, какая есть альтернатива?
 
Цитата
Cedro написал:
Необходимо суммировать
Консолидация (объединение) данных из нескольких таблиц в одну
Цитата
Cedro написал:
какая есть альтернатива?
Принципиально пересмотреть работу с данными. В чем смысл каждый день хранить на отдельном листе?
Если в мире всё бессмысленно, — сказала Алиса, — что мешает выдумать какой-нибудь смысл? ©Льюис Кэрролл
 
Цитата
какая есть альтернатива?
Макросом, запускать при активном листе Итог
Код
Sub Sbor()
Dim Sht As Worksheet
Dim FoundDate As Range
    For Each Sht In Worksheets
      If Sht.Name <> "Итог" Then        ' кроме листа "Итог"
        With Sht
          Set FoundDate = Rows(1).Find(.Range("B1"), , xlValues, xlWhole)
          If Not FoundDate Is Nothing Then
            .Range("B2:B3").Copy Cells(2, FoundDate.Column)
          End If
        End With
      End If
    Next
End Sub
 
Спасибо, Kuzmich. Хотелось бы обойтись без макроса, обычными формулами, но похоже вариантов немного.

Цитата
Bema написал: В чем смысл каждый день хранить на отдельном листе?
Bema, в примере я указал только пару параметров, чтобы описать принцип. В реальной таблице около 40 показателей (строки) и около 70 подразделений (столбцы). Заполнять и анализировать их удобнее именно ежедневно.
 
В разделе консолидации наименование листов заранее известны, а мне требуется суммировать многие показатели в разных подразделениях с 1-го, например, по текущее число. Причем важно, чтобы файл нормально всё считал, будучи перемещенным на другой компьютер или отправленным по почте
 
Цитата
а мне требуется суммировать многие показатели в разных подразделениях с 1-го, например, по текущее число
Приведите пример,подумаем.
 
Переделал файл, так он ближе к реальному. Данные на начало каждого следующего дня берутся из итога предыдущего. Сейчас в на листе Итоги стоят суммы ячеек на листах с 01 по 03. Мне требуется, чтобы это были переменные. Значения этих переменных неважно где брать, я их вырезаю из Числа дня, так проще тем, кто кроме меня пользуется файлом - поменяли число, получили нужный итог. Например, получить суммы с 01 по 14 число.
 
Cedro,
Цитата
Например, получить суммы с 01 по 14 число
А в книге точно будут эти 14 листов, или надо делать проверку на наличие листа в книге.
Суммы всегда считаются, начиная с первого дня месяца? Или есть начало и конец дней подсчета?
 
Проверку делать не нужно, в книге всегда будет 31 лист + Итоги + другие листы расчёта показателей.
Суммы не всегда считаются с первого дня. Например, в понедельник нужно с пятницы по воскресенье, таким образом есть начальная и конечная дата.
 
Есть уточнение. В начале каждого дня на листе ставится текущая дата. Это используется с одной стороны, как условие переноса данных с конца следующего дня, с другой, чтобы ограничить расчёта, например, 28-м февраля. Если дату не поставить, данные не перенесутся и лист просто останется пустой.
 
Цитата
таким образом есть начальная и конечная дата.
Добавил столбец В, в В1-начальная дата, в С1-конечная дата
Макрос переносит и суммирует данные по строкам от 3 до 7 по каждому отделу
Код
Sub Sbor()
Dim Sht As Worksheet
Dim F_Day As Integer
Dim E_Day As Integer
Dim i As Integer
Dim j As Integer
   Range("D3:G7").ClearContents     'очищаем диапазон
   F_Day = Day(Range("B1"))         'первый день
   E_Day = Day(Range("C1"))         'последний день
    For Each Sht In Worksheets      'цикл по листам
      If Sht.Name <> "Итог" Then    ' кроме листа "Итог"
        If Val(Sht.Name) >= F_Day And Val(Sht.Name) <= E_Day Then
         With Sht
            For i = 3 To 7
              For j = 4 To 7
                Cells(i, j) = Cells(i, j) + .Cells(i, j - 1)
              Next
            Next
          End With
        End If
      End If
    Next
End Sub
 
Добрый день!
Формулу не получилось написать, но сделал через дополнительный лист.
Посмотрите, в таком виде устроит?
Доп. лист можно скрыть после настройки.
 
Без макросов одной формулой. См. ячейку С2.
Формула вводится как ФОРМУЛА МАССИВА(т.е. Ctrl+Shift+Enter)
Изменено: The_Prist - 08.08.2017 10:43:44 (с первого раза загрузка файла не работала)
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Kuzmich, Vetermsk, The_Prist огромное спасибо! Буду разбираться.
 
Цитата
но суммировать по произвольно задаваемому диапазону листов, как я понял, ДВССЫЛ не умеет.
Вариант, с доп столбцом, выбором листов, и формулой в диспетчере имен. Можно и без диспетчера, но тогда формула удлинится.
Изменено: gling - 08.08.2017 20:06:49
Страницы: 1
Читают тему
Наверх