使用偏移量从另一张纸中求和单元格

时间:2013-03-09 18:32:43

标签: vba excel-vba excel

我正在尝试将此代码用于求和单元格:

Worksheets("Sheet2").Range("C3").Offset(i, j).Formula = "=Sum("
&Worksheets("Sheet1").Range("A3").Offset(2*i,j).Address & ":" &
Worksheets("Sheet1").Range("A7").Offset(2*i,j).Address & ")"

它一直给我正确的细胞,但来自错误的表格。因此,对于第一次迭代,我得到Sheet2的单元格C3中的总和(A3:A7),但A3:A7保持参考Sheet2而不是Sheet1。

谢谢!

2 个答案:

答案 0 :(得分:2)

您还需要在公式中指定工作表的名称。如果您这样写,您的代码将起作用:

Worksheets("Sheet2").Range("C3").Offset(i, j).Formula = "=Sum(Sheet1!" & _
Worksheets("Sheet1").Range("A3").Offset(2 * i, j).Address & ":" & _
Worksheets("Sheet1").Range("A7").Offset(2 * i, j).Address & ")"

答案 1 :(得分:1)

尝试使用此代码 - 它使用External:=True的{​​{1}}参数来检索完整地址。虽然这也包括工作簿名称,Excel将自动删除它,因此您最终得到Sheet1!A3。另请注意,我使用范围.Address作为源,因为A3:A7可以处理多单元格范围,您无需手动处理它:

.Address

请注意,Sheets("Sheet2").Range("C3").Offset(i, j).Formula = "=SUM(" & _ Sheets("Sheet1").Range("A3:A7").Offset(2 * i, j).Address(External:=True) & ")" 等硬编码引用可能会导致长期错误,因为用户(甚至某个阶段的开发人员)可能会修改工作表结构。最佳做法是使用命名范围,即为您引用的每个单元格/范围创建命名范围,然后在A3或类似的VBA中访问它!