VBA代码问题:单元格需输入公式而非计算结果,求修正方案
问题分析与解决代码
你的代码核心问题是直接拼接了单元格的值而非单元格的引用地址,导致生成的公式是具体数值的乘法(比如=15*20),而非引用单元格的动态公式(比如=$G$9*$AD12)。要实现需求,需要改用单元格的Address属性获取引用地址,并根据业务逻辑设置绝对/相对引用规则。
修改后的代码
Dim ShMonth As Worksheet Set ShMonth = ThisWorkbook.Worksheets("Month") Dim c As Long Dim r As Long For c = 7 To 37 For r = 12 To 53 If ShMonth.Cells(6, c).Value = "Forecast" Then ' 获取第9行对应列的绝对引用(固定第9行,列随循环变化) Dim dailySalesAddr As String dailySalesAddr = ShMonth.Cells(9, c).Address(RowAbsolute:=True, ColumnAbsolute:=True) ' 获取第39列对应行的引用(固定第39列,行随循环变化) Dim multiplierAddr As String multiplierAddr = ShMonth.Cells(r, 39).Address(RowAbsolute:=False, ColumnAbsolute:=True) ' 拼接动态公式并赋值 ShMonth.Cells(r, c).Formula = "=" & dailySalesAddr & "*" & multiplierAddr End If Next r Next c
关键改动说明
- 替换直接取值为
Address属性:获取单元格的引用地址,而非单元格内的具体数值,保证公式是动态引用而非固定数值运算 - 配置引用规则:
- 第9行的每日销量设置
RowAbsolute:=True,确保所有行的Forecast列都引用对应列的第9行数据 - 第39列的乘数设置
ColumnAbsolute:=True,确保所有Forecast列都引用对应行的第39列数据
- 第9行的每日销量设置
- 若需调整引用的灵活性(比如允许拖拽公式时自动变更引用),可修改
Address方法的RowAbsolute/ColumnAbsolute参数为False
内容的提问来源于stack exchange,提问作者Lisa
相关产品推荐
相关产品推荐

