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
相关产品推荐
相关产品推荐

