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

我有以下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中对应单元格的值,而是看到它是粘贴到随机单元格的公式。

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

首先,你在代码中使用了Selection ,但是你永远不会改变你的ActiveCell 。 无论如何,使用ActiveCell是不好的做法,你应该总是使用对象引用来复制,而不是你的select,除非它是完全必要的。

其次,你从来没有给它一个实际的范围粘贴,你只是给它的工作表,所以我很惊讶这不是抛出一些错误,当你尝试运行它。

我的代码是什么设置你想要迭代的范围(要使用Me ,你需要把它放在Sheet1的Sheet Module中,否则你需要明确地说它在Sheet1上),迭代它然后复制到相同的第二个明确定义的工作表的上一行/下一行索引。

当谈到最佳实践时,您应该总是明确地定义一些事情,特别是当您谈论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