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