Нет необходимости иметь столько If
операторов (или использовать Select Case
).Это просто шаблон, который вы можете использовать с Cells()
вместо просто Range()
:
Sub t()
Dim sheet As Worksheet
Dim startCol As Long, celVal As Long, i As Long
Dim shts() As Variant
startCol = 13 ' 14 is Column M
shts = Array(1, 3, 5, 7)
For i = LBound(shts) To UBound(shts)
With ActiveWorkbook.Worksheets(shts(i))
celVal = .Range("G2").Value
.Range("H10:H11").Value = .Range(.Cells(10, startCol + celVal), .Cells(11, startCol + celVal)).Value
.Range("H14:H22").Value = .Range(.Cells(14, startCol + celVal), .Cells(22, startCol + celVal)).Value
.Range("H27:H29").Value = .Range(.Cells(27, startCol + celVal), .Cells(29, startCol + celVal)).Value
End With
Next i
End Sub
Из вашего комментария я также настроил цикл For
, чтобы вместо этого просто проходить по определенным листам, которые вы хотите,(Я также предположил, что 1, 3, 5, 7
- это лист индексов , который вы хотите использовать, а не фактическое имя листа. Если листы действительно имеют имя 1
, 3
и т. Д., Используйте shts = Array("1", "3", "5", "7")
)