Код предполагает, что в ваших данных нет пустых ячеек, и я помещаю исходные данные в столбец A.
Первая часть кода предназначена для изменения кода для ваших нужд.
Вы задаете имя листа: ActiveWorkbook.Worksheets("Sheet1")
Вы сами решаете, какую строку начинать (включая заголовок): startrow = 1
А также, какие имена должны быть в новых перемещаемых столбцахto: SheetName.Cells(1, 2) = "Sl.No"
и т.д ..
Обратите внимание, что в коде создается вся новая таблица (копирование и вставка), старый столбец с данными будет удален в конце.
Код VBA
Sub MoveCells()
Dim lrow As Integer
Dim lrowno As Integer
Dim lrowname As Integer
Dim lrowcity As Integer
Dim i As Integer
Dim j As Integer
Dim k As Integer
Dim startrow As Integer
Dim SheetName As Worksheet
'################## Set variables ##################
Set SheetName = ActiveWorkbook.Worksheets("Sheet1") 'Name your worksheet
startrow = 1 'Set row number you want to sart the loop from
'Name first header rows
SheetName.Cells(1, 2) = "Sl.No" 'Column B = 2
SheetName.Cells(1, 3) = "Name" 'Column C = 3
SheetName.Cells(1, 4) = "City" 'Column D = 4
'################## Execute Code ##################
lrow = Cells(Rows.Count, 1).End(xlUp).Row 'Check the last row in Column A.
For i = startrow + 1 To lrow Step 3 'start from row 1 and add 1 row. Then loop to row lrow. After every loop it jump 3 rows.
lrowno = Cells(Rows.Count, 2).End(xlUp).Row 'Find last row in column B
SheetName.Cells(lrowno + 1, 2) = SheetName.Cells(i, 1) 'Copy Cells from Column A to Column B's last row
Next i
For j = startrow + 2 To lrow Step 3 'start from row 1 and add 2 rows. Then loop to row lrow. After every loop it jump 3 rows.
lrowname = Cells(Rows.Count, 3).End(xlUp).Row 'Find last row in Column C
SheetName.Cells(lrowname + 1, 3) = SheetName.Cells(j, 1) 'Copy Cells from Column A to Column C's last row
Next j
For k = startrow + 3 To lrow Step 3 'start from row 1 and add 3 rows. Then loop to row lrow. After every loop it jump 3 rows.
lrowcity = Cells(Rows.Count, 4).End(xlUp).Row 'Find last row in Column D
SheetName.Cells(lrowcity + 1, 4) = SheetName.Cells(k, 1) 'Copy Cells from Column A to Column D's last row
Next k
'Delete first column
Columns(1).EntireColumn.Delete
End Sub