我想创建一个非常简单的宏来复制某些单元格的值(在我的例子中是A1,A5,A9)并将它们粘贴到同一行的下一个空单元格中 比如B1,B5,B9。每次运行应创建一个具有复制值的下一个单元格(不覆盖B1,B5,B9,但将它们放入C1,C5,C9等)
这是我之前编写的代码
Private Sub CommandButton4_Click()
'Use the Range.Copy method for a simple copy/paste
'The Range.Copy Method - Copy & Paste with 1 line
Range("A1").Copy Range("B1")
Range("A5").Copy Range("B5")
Range("A9").Copy Range("B9")
End Sub
答案 0 :(得分:1)
这会将A1,A5,A9复制到同一行的下一个空单元格
Dim i As Long
For i = 1 To 9 Step 4 'loops 1, 5, 9 because of Step 4
With Range("A" & i)
If .Offset(0, 1) = vbNullString Then 'if B is empty
.Copy .Offset(0, 1)
Else 'find next free cell
.Copy .End(xlToRight).Offset(0, 1)
End If
End With
Next i
或者,在最后使用同一行中的单元格后复制到单元格
Dim i As Long
For i = 1 To 9 Step 4 'loops 1, 5, 9 because of Step 4
With Range("A" & i)
.Copy .Parent.Cells(i, .Parent.Cells.Columns.Count).End(xlToLeft).Offset(0, 1)
End With
Next i
请注意,我强烈建议在哪个工作表中指定范围A1(对于两种变体): 而不是
Range("A" & i)
始终指定一个像
这样的工作表Worksheets("SheetName").Range("A" & i)
答案 1 :(得分:0)
另一种方法是使用后期绑定:
With ThisWorkbook.Worksheets("Sheet1")
.Range("A1").Copy .Cells(1, .Cells(1, .Columns.count).End(xlToLeft).Column + 1)
.Range("A5").Copy .Cells(5, .Cells(5, .Columns.count).End(xlToLeft).Column + 1)
.Range("A9").Copy .Cells(9, .Cells(9, .Columns.count).End(xlToLeft).Column + 1)
End With