如何使用VBA循环剪切一系列单元格并将其粘贴到下一行

时间:2019-06-10 23:58:15

标签: excel vba

此VBA的目的是通过将每一行值限制为22个值,使一行较长的值(成千上万个)变得更具可读性。我有一个适用于200行的手动版本,但是希望使用循环来节省时间并希望提高性能。

示例: 我在A1:ZZ1中有值,并尝试剪切W1:ZZ1并粘贴到A2中,然后剪切W2:ZD2并粘贴到A3中,直到没有剩余值可以剪切和粘贴为止。

我正在使用Excel 2010。

Sub InsertScript22perLine()
'Turn off screen updating to speed up macro
Application.ScreenUpdating = False

    Range("W1").Select
    Range(Selection, Selection.End(xlToRight)).Select
    Selection.Cut
    Selection.End(xlToLeft).Select
    Range("A2").Select
    ActiveSheet.Paste
    Range("W2").Select
    Range(Selection, Selection.End(xlToRight)).Select
    Selection.Cut
    Selection.End(xlToLeft).Select
    Range("A3").Select
    ActiveSheet.Paste

'Turn screen updating back on
Application.ScreenUpdating = True
End Sub

1 个答案:

答案 0 :(得分:-1)

Sub InsertScript22perLine()

    Application.ScreenUpdating = False

    ' Starting column for input data
    Dim sStartCol As String
    Dim lStartCol As Long

    ' Count of columns
    Dim lColCount As Long

    ' Count of columns of data for output
    Dim lRowLen As Long
    lRowLen = 22

    Dim lRow As Long
    lRow = 2

    sStartCol = "W"
    lStartCol = Range(sStartCol & 1).Column

    ' Get the column count
    lColCount = Cells(1, Columns.Count).End(xlToLeft).Column

    For a = lStartCol To lColCount Step lRowLen
        Range(Cells(lRow, 1), Cells(lRow, lRowLen)).Value = Range(Cells(1, a), Cells(1, a + lRowLen)).Value
        lRow = lRow + 1
    Next


    Application.ScreenUpdating = True
End Sub