【问题标题】:Excel macro to copy values from certain cells and paste them into next empty cellsExcel宏从某些单元格中复制值并将它们粘贴到下一个空单元格中
【发布时间】:2018-04-10 08:28:46
【问题描述】:

我想制作一个非常简单的宏,它将从某些单元格(在我的例子中为 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

【问题讨论】:

    标签: vba excel copy paste


    【解决方案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
    

    或者复制到 last 使用同一行中的单元格后的单元格

    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)
    

    【讨论】:

    • 非常感谢,这正是我想要的:D
    • @Matt 如果 B 列为空,则前面的代码将失败。查看我更新的代码。其中也使用了一个循环。如果这解决了您的问题,请将此答案标记为解决方案。
    【解决方案2】:

    另一种方法是使用后期绑定:

    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
    

    【讨论】: