使用偏移量从另一个工作表中求和单元格



我想让这个代码为求和单元格工作:

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中得到sum(A3:A7),但A3:A7仍然引用Sheet2而不是Sheet1。

谢谢!

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

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 & ")"

试试这段代码——它使用.AddressExternal:=True参数来检索完整地址。虽然这也包括工作簿名称,但Excel将自动删除此内容,因此最终得到Sheet1!A3。还请注意,我使用范围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中使用SheetX.Range("rngStartCell")或类似的方法访问它!

最新更新