#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. Спасибо, это помогло!