Формула Excel: для суммирования одинаковых значений ячеек из нескольких листов с именами в качестве дат

#excel #cell

#excel #ячейка

Вопрос:

Есть ли способ суммировать все значения одной и той же ячейки на нескольких листах (вкладке), название каждой вкладки — дата, и отобразить суммированное значение в мастер-таблице?

Например:

введите описание изображения здесь

В настоящее время я использую эту формулу =SUM(INDIRECT("'*-"amp;MONTH(C2)amp;"-2020'!$E$3")) в ячейке под ячейкой «Октябрь-2020», как показано на рисунке ниже, и я сделаю то же самое для 20 ноября и 20 декабря.

введите описание изображения здесь

Как вы можете видеть, я получаю эту ошибку «#REF!». В настоящее время у меня есть две вкладки, из которых я пытаюсь получить значения ячеек «$ E $ 3», «13-10-2020» и «14-10-2020». Однако, если у меня есть только один лист (скажем, только «14-10-2020»), я могу получить значение.

Кто-нибудь знает, что происходит с моей формулой? Почему это работает, когда есть только один лист (вкладка) для чтения, но не работает, когда есть несколько листов (вкладок), даже я использовал «*» для включения всех дат.

Пожалуйста, посоветуйте. Спасибо в расширенном

Ответ №1:

Я думаю, это должно решить вашу проблему:

 Option Explicit

Sub sub_sum_up_months()
    Dim wks As Worksheet
    Dim nr_month As Integer, nr_year As Integer
    Dim str_month As String, str_year As String
    Dim c As Integer
    Dim my_Sum As Double

    For c = 3 To 5 ' Iterating over the columns "C" to "E"
        my_Sum = 0
    
        nr_month = month(Worksheets("MasterSheet").Cells(2, c).Value)
        If nr_month < 10 Then
            str_month = "0" amp; nr_month
        Else
            str_month = CStr(nr_month)
        End If
        
        nr_year = Year(Worksheets("MasterSheet").Cells(2, c).Value)
        str_year = CStr(nr_year)
        
        For Each wks In ThisWorkbook.Worksheets
            If Right(wks.Name, 4) = str_year And Left(Right(wks.Name, 7), 2) = str_month Then
                my_Sum = my_Sum   wks.Cells(3, 5) 'cells(3,5) is "E3"
            End If
        Next wks
        Worksheets("MasterSheet").Cells(3, c).Value = my_Sum
    Next c
End Sub
  

Ответ №2:

Вы можете использовать функцию sum .
Следуйте этому шаг за шагом, и это сработает.

В вашем мастер-листе C3 введите =Sum(
Щелкните на листе 13-10-2020 и ячейке E3.
Теперь нажмите и удерживайте shift. Щелкните на последнем листе, который является октябрем, и нажмите Ввод.

Теперь вы должны получить сумму всех E3 в октябрьских листах.

Насколько я знаю, нет формулы для выполнения этой динамики, но я совершенно уверен, что это можно сделать в VBA, если имена листов соответствуют шаблону.

Комментарии:

1. Андреас, спасибо за ваше предложение. Да, вы правы, мое требование довольно динамичное, потому что я создал кнопку (не показанную в вопросе), которая будет генерировать новый лист, каждый раз, когда я нажимаю ее, однажды, один лист. Итак, через два дня я снова нажимаю кнопку, у меня будет лист с именем «15-10-2020». Нет ли способа, которым формула может достичь того, чего я хочу, кроме использования вашего метода? Спасибо!

2. Я сомневаюсь в этом. Я считаю, что вам нужно использовать VBA для решения этой проблемы. Значит, через год в этой книге будет 366 листов? В этом случае я считаю, что код VBA для этого будет довольно медленным.

3. Привет, Андреас, да, за один год будет 366 листов. Я посмотрю, смогу ли я найти какое-либо решение VBA для решения моей проблемы. Спасибо!