VBA为单元格设置SUMPRODUCT公式时区域选取错误求助
问题原因
直接将Range对象与公式字符串拼接时,VBA会隐式读取Range的默认属性Value(即单元格内存储的数值)插入公式字符串,而非插入单元格的引用地址,最终生成的SUMPRODUCT公式不符合语法规则,无法正确指向目标单元格区域。
另外代码中所有Cells对象未明确指定所属工作表,若代码运行时活动工作表不是目标操作表,也会出现区域定位偏差。
修复方法
- 拼接公式时必须显式调用Range对象的
Address属性获取单元格引用地址,按需选择绝对/相对引用即可。 - 所有单元格、区域对象前明确绑定所属工作表,避免活动表切换导致的定位错误。
修正后的可运行代码:
' 先绑定目标工作表,替换为你实际的工作表名称 Dim opWs As Worksheet Set opWs = ThisWorkbook.Worksheets("目标工作表名") With opWs Set R11 = .Cells(7, 18) Set R12 = .Cells(LastRow - 1, LastColumn - 1) Set R21 = .Cells(7, LastColumn + 2) Set R22 = .Cells(LastRow - 1, LastCol2 - 1) Set Fcell = .Cells(6, LastCol2) ' 用Address属性取单元格绝对引用地址拼接公式,不需要固定引用就传参数改相对引用 Fcell.Formula = "=SUMPRODUCT(" & R11.Address & ":" & R12.Address & "," & R21.Address & ":" & R22.Address & ")" End With
补充说明
如果需要公式支持拖动时自动偏移引用区域,可以给Address属性传入参数关闭绝对引用,写法为Address(RowAbsolute:=False, ColumnAbsolute:=False),生成的地址不会带$锁定标记。
内容的提问来源于stack exchange,提问作者Human
相关产品推荐
相关产品推荐

