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

时间:2018-09-10 15:30:07

标签: excel vba loops copy paste

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

img1

这是我尝试过的宏的一个示例:

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的初学者,希望您能对此有所帮助-预先感谢。

这是我当前的结果:

img2

3 个答案:

答案 0 :(得分:2)

您可以使用:

A

请注意,使用上面的代码,如果不是10的倍数,则最后一次迭代将在列{{1}}中的最后一行之下。

答案 1 :(得分:1)

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

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行开始复制,因此我删除了最后一个空的第一个单元格以将所有内容向上移动。

答案 2 :(得分:0)

完全灵活的代码

除了@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 Long。未明确声明的v全部变量默认为Variant
  • 始终使用完全限定的范围引用,否则值默认为活动工作表,这可能会导致错误的值。
  • 变量n在A列中找到最后一行,并将其四舍五入为10行的完整块大小。
  • 您可以轻松地在一个代码行中将范围值分配给变量二维数组,例如通过v = ws.Range("A1:E1234")v = ws.Range("A1:A17").Value其他提示该数组的每个成员都可以通过行和列索引进行寻址。请注意,从工作表范围中获取值的数据字段数组是基于 1的,因此第一个值将被寻址为v(1,1)