Суммировать одну и ту же ячейку в нескольких книгах

#excel #vba #excel-formula

#excel #vba #excel-формула

Вопрос:

У меня есть еженедельные расписания в отдельных книгах. В конце месяца мне нужно суммировать все часы во всех книгах, когда я создаю ежемесячный счет. Имя листа и адрес ячейки одинаковы во всех книгах. Название листа «Оплачиваемый еженедельный АКТ Rpt». Общее количество часов хранится в ячейке I21, поэтому адрес «Оплачиваемый еженедельный АКТ Rpt»! $ I $ 21.

Я хочу макрос, который суммирует все «Оплачиваемые еженедельные АКТЫ Rpt»! $ I $ 21 по всем открытым книгам.

Вот что у меня есть на данный момент. Это работает для 1 книги, но не более чем для 1 открытой книги

 Sub SumCellOpenWorkbooks()
    Dim iWbCount As Integer, sSumAddress As String
    
    For iWbCount = 1 To Workbooks.Count
        
        If Not (Workbooks(iWbCount).Name = "PERSONAL.XLSB" Or Workbooks(iWbCount).Name = "Book1") Then
            sSumAddress = "'[" amp; Workbooks(iWbCount).Name amp; "]" amp; "Weekly ACT Rpt Billable'!" amp; "$I$21"
            Debug.Print sSumAddress
            ActiveSheet.Range("A1").Formula = "=sum(" amp; sSumAddress amp; ")"
        End If
    Next
    
End Sub
  

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

1. Вы перезаписываете формулу в формате A1 для каждой книги в цикле. Вам нужна формула, или вы можете просто сохранить текущую сумму в цикле, а затем добавить ее к A1, когда закончите цикл?

2. Я бы рассмотрел сводный лист, в котором есть ячейка для каждой книги, тогда проверка отсутствующих значений будет проще…

Ответ №1:

Как насчет этого?

 For iWbCount = 1 To Workbooks.Count
        
    If Not (Workbooks(iWbCount).Name = "PERSONAL.XLSB" Or Workbooks(iWbCount).Name = "Book1") Then
        If sSumAddress = "" Then
            sSumAddress = "'[" amp; Workbooks(iWbCount).Name amp; "]" amp; "Weekly ACT Rpt Billable'!" amp; "$I$21"
        Else
            sSumAddress = sSumAddress amp; ",'[" amp; Workbooks(iWbCount).Name amp; "]" amp; "Weekly ACT Rpt Billable'!" amp; "$I$21"
        End If
        Debug.Print sSumAddress
    End If
Next
ActiveSheet.Range("A1").Formula = "=sum(" amp; sSumAddress amp; ")"
  

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

1. Спасибо, это помогло!