Если вы предпочитаете не использовать фокусы ячеек, for each
l oop - это хорошая точка для начала итерации по листам в вашей книге, с оператором if для управляющих листов, который следует игнорировать.
Dim ws As Worksheet
Set sum_ws = ActiveWorkbook.Worksheets("summary")
For Each ws In ActiveWorkbook.Worksheets
If ws.Name <> "summary" Then
' rest of your code
End If
Next ws
Отслеживать, какую ячейку вы заполняете в сводной таблице, немного сложнее. Если листы в вашей рабочей книге всегда будут в правильном порядке, вы можете объявить целое число и увеличивать его после каждого l oop и использовать его для ссылки на индекс столбца:
Dim ws As Worksheet
Dim sum_ws As Worksheet 'summary worksheet
Dim i As Integer
i = 1
For Each ws In ActiveWorkbook.Worksheets
If ws.Name <> "summary" Then
sum_ws.Cells(3, i).Value = ws.Range("B3").Value
i = i + 1
End If
Next ws
Однако, если листы не могут быть гарантированы в правильном порядке, было бы лучше явно указать каждую ячейку сводного листа как отдельный диапазон и сохранить их в коллекции или словаре для последующего использования при итерации листов.
Dim ws As Worksheet
Dim sum_ws As Worksheet
Dim coll As New Collection
Dim t1 As Range 'team 1 summary cell
Dim t2 As Range 'team 2 summary cell
Dim t3 As Range 'team 3 summary cell
Set sum_ws = ActiveWorkbook.Worksheets("summary")
Set t1 = sum_ws.Range("A2")
Set t2 = sum_ws.Range("B2")
Set t3 = sum_ws.Range("C2")
coll.Add Item:=t1, Key:="team1" 'key same as sheet name
coll.Add Item:=t2, Key:="team2"
coll.Add Item:=t3, Key:="team3"
For Each ws In ActiveWorkbook.Worksheets
If ws.Name <> "summary" Then
coll(ws.Name) = ws.Range("B3").Value
End If
Next ws
Надеюсь, это поможет.