Я пытаюсь переставить все столбцы "B", но хочу пропустить строку, затем взять следующие 4 и вставить их в тот же столбец. Как сделать так, чтобы в этом цикле все столбцы "B" пропускались через каждую 5-ю строку и автоматически изменяли диапазон на следующую открытую ячейку или "Range", не вводя каждый из них по отдельности?

Range("B12:B16").Select
    Selection.Copy
    Sheets("Sheet2").Select
    Range("A2").Select
    Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _
        False, Transpose:=True
    Range("B18:B22").Select
    Selection.Copy
    Sheets("Sheet2").Select
    Range("A3").Select
    Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _
        False, Transpose:=True
    Range("B24:B28").Select
    Selection.Copy
    Sheets("Sheet2").Select
    Range("A4").Select
    Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _
        False, Transpose:=True

2 ответа2

1

Вы можете назвать свои ячейки в столбце на Sheet1 как «данные», а затем сделать следующее в Sheet2 ...

     A        B                    C                    D                    E
1    0        =INDEX(data,$A1+1)   =INDEX(data,$A1+2)   =INDEX(data,$A1+3)  =INDEX(data,$A1+4)
2    =A1+5    =INDEX(data,$A2+1)   =INDEX(data,$A2+2)   =INDEX(data,$A2+3)   =INDEX(data,$A2+4)
3    =A2+5    =INDEX(data,$A3+1)   =INDEX(data,$A3+2)   =INDEX(data,$A3+3)   =INDEX(data,$A3+4)
4    ...

и затем автоматически заполните столько строк, сколько вам нужно.

0

Попробуйте следующее, что я только что собрал, то есть, если вам нужна макро-версия, а не предложенная на основе формулы.

По сути, я считаю, что он должен делать то же, что и ваш статический код, но в цикле - так что ручная работа по копированию и вставке невозможна. Он может задохнуться, если весь столбец заполнен (он умрет, когда попытается выбрать за последний ряд).

Возможно, вам придется изменить начальное и вставное расположение (в верхней части) в соответствии с вашими конкретными требованиями - в настоящее время он копирует из столбца B в столбцы CF.

Dim CopyCell As Range
Dim PasteCell As Range

'starting location (ie, top of the list to copy)
Range("B1").Select

'pasting location (ie, top-left cell to start pasting to)
Set PasteCell = Range("C1")

Do While ActiveCell.Value <> 0
    'copy the items in the next four rows
    Set CopyCell = ActiveCell.Range("A1")
    ActiveCell.Range("A1:A4").Select
    Selection.Copy

    'move to paste location
    PasteCell.Select

    'paste with transpose
    Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, _
        SkipBlanks:=False, Transpose:=True

    'adjust paste location for next paste
    Set PasteCell = PasteCell.Offset(1, 0)

    'return to last copied location and and move down five steps
    'copying 4 rows but moving 5 is how every 5th row is missed
    CopyCell.Select
    ActiveCell.Offset(5, 0).Select
Loop

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .