从范围循环中的每个单元格复制数据并将其粘贴到另一张纸上

Posted

技术标签:

【中文标题】从范围循环中的每个单元格复制数据并将其粘贴到另一张纸上【英文标题】:copy data from each cell in range loop and paste it on another sheet 【发布时间】:2015-02-08 20:10:46 【问题描述】:

我有以下 vba 代码 子宏1()

    Dim FLrange As Range
    Set FLrange = Range("C3:E3")

    For Each cell In FLrange
        If cell.Value = 0 Then cell.FormulaR1C1 = "=SUMIFS(raw!C4,raw!C1,R[0]C1,raw!C3,R2C[0])"

    Next cell

End Sub

现在,在执行上述代码中的公式之前,我想在此添加另一个函数。我需要将当前单元格值复制到完全相同单元格上的另一张纸上。即,必须将 sheet1 单元格 C3 中的值粘贴到 sheet2 单元格 C3

我试过了

Sub Macro1()

    Dim FLrange As Range
    Set FLrange = Range("C3:E3")

    For Each cell In FLrange
    Selection.Copy
    Sheets("sheet2").Paste
        If cell.Value = 0 Then cell.FormulaR1C1 = "=SUMIFS(raw!C4,raw!C1,R[0]C1,raw!C3,R2C[0])"

    Next cell

End Sub

但是这个不是在sheet2中粘贴值对应的单元格,而是看到它正在将公式粘贴到随机单元格。

如何将当前工作表 (sheet1) 范围内每个单元格的值粘贴到另一工作表 shet2 的相应单元格中

【问题讨论】:

【参考方案1】:

首先,您在代码中使用了Selection,但您永远不会更改您的ActiveCell。无论如何,使用ActiveCell 是不好的做法,除非完全必要,否则您应该始终使用对象引用而不是您的选择来复制。

其次,你从来没有给它一个实际的粘贴范围,你只是给它工作表,所以我很惊讶当你尝试运行它时这并没有引发某种错误。

我的代码做了什么设置了你想要迭代的范围(要使用Me,你需要把它放在Sheet1的工作表模块中,否则你需要明确地说它在Sheet1上),迭代它然后将其复制到第二张明确定义的工作表上的相同 Col/Row 索引。

当谈到最佳实践时,您应该始终明确地定义事物,尤其是在您谈论 VBA 时。

Option Explicit
Sub Test()

    Dim rng         As Range
    Dim c           As Range
    Dim dest        As Worksheet


    Set rng = Me.Range("A1:A10")
    Set dest = ThisWorkbook.Worksheets("Sheet2") '' rename this to whatever sheet you want this to copy to

    For Each c In rng
        c.Copy dest.Cells(c.Row, c.Column)

        If c.Value = 0 Then
            c.FormulaR1C1 = "=SUMIFS(raw!C4,raw!C1,R[0]C1,raw!C3,R2C[0])"
        End If
    Next c

End Sub

【讨论】:

告诉 O.P. 使用对象引用,在他的回答中使用 ThisWorkbook 的相对引用... :-P

以上是关于从范围循环中的每个单元格复制数据并将其粘贴到另一张纸上的主要内容,如果未能解决你的问题,请参考以下文章

VBA复制最后一行范围并粘贴到另一个工作表

如何把一个excel表中的公式粘贴到另一张表上?我用的2007版本的。

MAC VBA尝试从每个工作表中剪切一个单元格并粘贴到下一个空单元格中的另一张表中

宏复制到另一张纸上的下一个空白行

Excel VBA 将值从一张表移动到另一张表

循环遍历一张表中的列值并将另一列中的 COUNTIF 值粘贴到另一张表中