复制粘贴每10个单元格范围*10次到一列

Copy paste every 10 cells range *10 times to a column

我想每 10 行复制粘贴一次,从 A 列到 B 列复制 10 次,依此类推,直到 A 列结束。

这是我尝试过的宏示例:

Sub cpydble()
Dim j As Long
Dim i As Long
Dim lRow As Long


lRow = Cells(Rows.Count, 1).End(xlUp).row


For i = 1 To lRow Step 10
    For j = 1 To 100 Step 10
    Cells(i, 1).Resize(10).Copy Destination:=Cells(j, 2)

    Next j
Next i
End Sub

我是 VBA 的初学者,希望您能对此有所帮助 - 提前致谢。

这是我目前的结果:

您可以使用:

For i = 1 To lRow Step 10
    Range("B" & i & ":B" & i + 9).Value = Range("A1:A10").Value
Next i

请注意,使用上面的代码,如果最后一次迭代不是 10 的倍数,则最后一次迭代将低于列 A 中的最后一行。

每次都从 1 开始 j 可能是搞砸了。只需为每个循环找到下一个打开的单元格。

Sub cpydbl()

    Dim i As Long, j As Long
    Dim lRow As Long

    lRow = Cells(Rows.Count, 1).End(xlUp).Row

    For i = 1 To lRow Step 10
        For j = 1 To 10
            Cells(i, 1).Resize(10).Copy Cells(Rows.Count, 2).End(xlUp).Offset(1, 0)
        Next j
    Next i

    Cells(1, 2).Delete xlShiftUp

End Sub

Offset 从第 2 行开始复制,所以我删除了最后空的第一个单元格以将所有内容向上移动。

完全灵活化的代码

除了@DickKusleika 的精美代码外,我还演示了一种使用数据数组的完全灵活的方法,您可以在其中定义替代块大小、重复次数和通过常量开始的行。

Option Explicit                                    ' declaration head of your code module

Sub copyBlocks()
Const SIZE& = 10, REPETITIONS& = 10, STARTROW& = 1 ' define block size, repetions and start row
Dim ws As Worksheet, i&, j&, k&, n&, v             ' declare variables
Set ws = ThisWorkbook.Worksheets("MySheet")        ' << change to your sheet name
n = ws.Range("A" & ws.Rows.Count).End(xlUp).Row    ' find last row number in column A
n = ((n + SIZE) \ SIZE) * SIZE                     ' round up to full block size of 10 rows
ws.Range("B:B") = ""                               ' clear column B
k = STARTROW                                       ' start row of 1st block series
For i = STARTROW To n Step SIZE                    ' if STARTROW = 1 For i=1, 11, 21, 31 ... To n
    v = ws.Range("A" & i).Resize(SIZE)             ' get next data block (10 rows)
    For j = 1 To REPETITIONS                       ' write eg. 10 data blocks to column B
        ws.Range("B" & (k + (j - 1) * SIZE)).Resize(SIZE) = v
    Next j
    k = k + SIZE * REPETITIONS                     ' get start row of next block series
Next i
End Sub

备注

  • 声明变量(及其类型)并通过在代码模块的声明头声明 Option Explicit 来强制自己这样做;符号 & 是例如Dim i As Longv所有未显式声明的变量默认为Variant.
  • 始终使用完全限定范围引用,否则值默认为活动 sheet,这可能会导致错误值。
  • 变量 n 查找 A 列中的最后一个行号并将其四舍五入为 10 行的完整块大小。
  • 您可以在一行代码中轻松地将范围值分配给变体二维数组,例如通过 v = ws.Range("A1:E1234")v = ws.Range("A1:A17").Value进一步提示这个数组的每个成员都可以通过行和列索引来寻址。请注意,从 worksheet 范围获取值的数据字段数组是基于 1 的 ,因此第一个值将被寻址为 v(1,1)