我想每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的初学者,希望您能对此有所帮助-预先感谢。
这是我当前的结果:
答案 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)
。