You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

VBA如何在指定单元格区域插入带相对单元格引用的公式

VBA批量写入带相对引用的Excel公式方案

原代码问题

你的代码有三个核心问题,导致无法生成预期公式:

  • 使用FormulaR1C1属性时引用格式不符合R1C1规则:D[0]是错误写法,R1C1规则下引用当前行左侧1列的D列单元格,相对引用写法为RC[-1]
  • 公式语法缺失连接符和文本定界符:要实现单元格内容和固定字符串拼接,Excel公式需要用&做连接符,文本内容需要用半角双引号包裹,原代码直接把引用和文本拼在一起,会触发公式语法错误
  • 逻辑隐患:Rows.Count未指定所属工作表,当wsdata不是活动工作表时,会取错行数导致范围判断错误

修正后可直接运行的代码

Dim datejour As String
Dim datemois As String
Dim dateannee As String
Dim lastrow2 As Long

datejour = Format(Day(Date), "00")
datemois = Format(Month(Date), "00")
dateannee = Year(Date)

' 加wsdata限定,避免取错工作表行数
lastrow2 = wsdata.Range("C" & wsdata.Rows.Count).End(xlUp).Row + 1
' 批量写入R1C1公式,VBA中用两个双引号转义公式内的一个双引号
wsdata.Range("E2:E" & lastrow2).FormulaR1C1 = "=SDM(RC[-1]&""CALC" & dateannee & datemois & datejour & """)"

实现效果

运行后E列公式会自动按行偏移生成相对引用:

  • E2单元格公式:=SDM(D2&"CALC202Xxxxx")
  • E3单元格公式:=SDM(D3&"CALC202Xxxxx")
  • 后续行以此类推,完全符合“每行自动引用同行D列单元格、拼接固定日期字符串作为SDM参数”的要求,批量写入不需要逐行循环,运行效率更高。

如果你需要和示例表格完全一致的公式效果(即参数为D+行号+CALC+日期格式的固定标识,不读取D列单元格值),只需要把最后一行赋值公式的代码替换为以下内容即可:

wsdata.Range("E2:E" & lastrow2).FormulaR1C1 = "=SDM(INDIRECT(""D""&ROW()&""CALC" & dateannee & datemois & datejour & """))"

内容的提问来源于stack exchange,提问作者HugoLny

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.02 23:12:32