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

时间:2014-12-10 15:05:27

标签: excel vba excel-formula

我有以下vba代码     Sub Macro1()

    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 个答案:

答案 0 :(得分:1)

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

其次,你永远不会给它一个实际的粘贴范围,你只需要给它一张,所以我很惊讶,当你试图运行它时,不会抛出某种错误。

我的代码设置了你想要迭代的范围(要使用Me,你需要将它放在Sheet1的Sheet Module中,否则你需要在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