Исходя из требований, следующее должно делать то, что вам нужно:
Private Sub CommandButton1_Click()
Dim sourcesheet As Worksheet
Dim destsheet As Worksheet
Dim repeat_x_times As Long, loopcounter As Long
Dim onelocation As Long, spread As Long
Dim locations As Variant
Dim locationlist As String
'---------------------------------------
' edit these as you see fit
'---------------------------------------
Set sourcesheet = Sheets("Sheet1")
Set destsheet = Sheets("Sheet2")
locationlist = "D3,B4,B5,B6,B7"
spread = 11
repeat_x_times = 6
'---------------------------------------
locations = Split(locationlist, ",")
With sourcesheet
For loopcounter = 1 To repeat_x_times
For onelocation = 0 To UBound(locations)
.Range(locations(onelocation)).offset((loopcounter - 1) * spread, 0).Copy destsheet.Cells(loopcounter, 2 + onelocation)
'or if you don't need formatting, just values (much quicker):
'destsheet.Cells(loopcounter, 2 + onelocation).Value = .Range(locations(onelocation)).offset((loopcounter - 1) * spread, 0).Value
Next
Next
End With
End Sub
Я сделал это легко настраиваемым для ваших нужд, просто отредактируйте переменные:
locationlist
это список ячеек, которые вы хотите выбрать, в том порядке, в котором вы хотите, чтобы они выводились на листе 2.
spread
- это смещение между повторениями.
repeat_x_times
- это количество строкВы хотите вывод.
Я использовал оператор копирования аналогично существующему коду, но если вы не хотите копировать форматирование и т. д., вы можете просто использовать переключатель значений. Я закомментировал код, но если вы хотите его использовать, удалите комментарий и закомментируйте строку copy
.