Да, просто переберите листы.ПРИМЕЧАНИЕ: лучше избегать использования .Select
/ .Activate
Sub autoSum_AllSheets()
Dim ws As Worksheet
Dim cel1 As String, cel2 As String
Dim firstCel As Range
For Each ws In ActiveWorkbook.Worksheets
With ws
Set firstCel = .Range("D4").End(xlDown).Offset(2, 0)
cel1 = firstCel.Offset(-2, 0).End(xlUp).Address
cel2 = firstCel.Offset(-1).Address
firstCel.Value = "=SUM(" & cel1 & ":" & cel2 & ")"
End With
Next ws
End Sub
Примечание: я знаю о избыточности в деталях Offset()
, но просто держу их вдля OP, чтобы увидеть, как легче избежать .Select
/ .Activate
.
Редактировать: Чтобы перебрать группу столбцов, один (хотя и клудливый) способ - просто добавить буквы столбцов в массив:
Sub autoSum_AllSheets()
Dim ws As Worksheet
Dim cel1 As String, cel2 As String
Dim firstCel As Range
Dim cols() As Variant
cols = Array("D", "E", "F")
Dim i As Long
For Each ws In ActiveWorkbook.Worksheets
With ws
For i = LBound(cols) To UBound(cols)
Set firstCel = .Range(cols(i) & "4").End(xlDown).Offset(2, 0)
firstCel.Select
cel1 = firstCel.Offset(-2, 0).End(xlUp).Address
cel2 = firstCel.Offset(-1).Address
firstCel.Value = "=SUM(" & cel1 & ":" & cel2 & ")"
Next i
End With
Next ws
End Sub
Обратите внимание, что если столбец делает не имеет какую-либо информацию в ячейке после 5-й строки, вы получите сообщение об ошибке (поскольку .XlDown
идет до самой последней строки, и вы не можете Offset(2,0)
оттуда.)