如何通过VBA生成无绝对引用($符号)的Excel动态公式?
解决VBA生成Excel相对引用公式(不带$)的问题
嘿,这个问题我熟!你当前用FormulaR1C1生成带$的绝对引用,是因为R4C2这种写法属于固定行号和列号的绝对引用格式,Excel自然会转换成$B$4这种带锁定符号的公式。要生成不带$的相对引用,有两种简单靠谱的方案:
方法1:直接用A1样式的Formula属性(最直观)
既然你想要的是A1格式的相对引用,直接放弃FormulaR1C1,改用Formula属性就行——Excel会自动帮你在填充时维护相对引用的行号递增:
Dim ws As Worksheet Dim u As Long Set ws = ActiveSheet u = 9 Dim used As Range Set used = ws.UsedRange Dim lastRow As Integer lastRow = used.Row + used.Rows.Count - 2 ' 改用Formula属性,直接写A1样式的相对引用公式 ws.Range("K4:K" & lastRow).Formula = "=(B4-I4)/10"
设置后,K4的公式是=(B4-I4)/10,K5会自动变成=(B5-I5)/10,完美匹配你的需求。
方法2:用R1C1的相对引用语法(适合动态列场景)
如果你坚持要用FormulaR1C1,就得把绝对引用改成相对引用格式。在R1C1语法里,RC[-n]代表「当前行、向左数n列」的单元格(纯相对引用)。对于K列(第11列)来说:
- B列是向左数9列(11-2=9),对应
RC[-9] - I列是向左数2列(11-9=2),对应
RC[-2]
修改后的代码如下:
Dim ws As Worksheet Dim u As Long Set ws = ActiveSheet u = 9 Dim used As Range Set used = ws.UsedRange Dim lastRow As Integer lastRow = used.Row + used.Rows.Count - 2 ' 使用R1C1的相对引用语法,动态计算列偏移 ws.Range("K4:K" & lastRow).FormulaR1C1 = "=(RC[-9]-RC[-" & (11 - u) & "])/10"
这里11 - u是动态计算从K列到目标列的偏移量,就算后续u的值变化,代码也能自动适配对应的列。
两种方法都能生成不带$的相对引用公式,个人更推荐第一种,A1格式的公式写起来直观,不容易搞混偏移量~
内容的提问来源于stack exchange,提问作者Ultiseeker




