作者:绿色风
分类:
时间:2022-08-17
浏览:142
楼主 kevinchengcw |
Q: 如何用vba代码将全部的公式中的相对引用变成绝对引用? A: 代码如下:
- Sub test()
- Dim Rng As Range, Str$, mMatch
- With CreateObject("vbscript.regexp") '创建正则项目
- .Global = True '设定全局有效
- .Pattern = "(R|C)(\[)([-\d]+)(\])" '设定匹配规则为相对引用的特征(即R或C后面跟[],[]内是正或负的数值)
- For Each Rng In ActiveSheet.UsedRange '循环活动工作表已使用区域各个单元格
- If Rng.HasFormula Then '如果单元格含有公式,则执行下述代码
- Str = Rng.FormulaR1C1 '提取公式内容赋值给字符串
- If .test(Str) Then '检测是否含有匹配内容,如果有则执行下述代码
- For Each mMatch In .Execute(Str) '循环各个匹配项
- With mMatch '根据匹配项的开头是R或C来替换匹配内容为行或列值与[]中数值的相加和
- Str = Replace(Str, .Value, .submatches(0) & Evaluate(IIf(.submatches(0) = "R", Rng.Row,
- Rng.Column) + .submatches(2)))
- End With
- Next mMatch
- End If
- If Rng.HasArray Then '再判断原单元格含有的是否是数组公式,如果是,以数组公式方式写回单元格
- Rng.FormulaArray = Str
- Else '否则以普通公式方式写回单元格
- Rng.FormulaR1C1 = Str
- End If
- End If
- Next
- End With
- End Sub
|
2楼 danysy |
Kevin老师的功力真的好深厚啊 |
免责声明
有感于原ExcelTip.Net留存知识的价值及部分知识具有的时间限定性因素,
经与ExcelTip.Net站长Apolloh商议并征得其同意,
现将原属ExcelTip.Net的知识帖采集资料于本站点进行展示,
供有需要的人士查询使用,也慰缅曾经的论坛时代。
所示各个帖子的原作者如对版权有异议,
可与本人沟通提出,或于本站点留言,我们会尽快处理。
在此,感谢ExcelTip.Net站长Apolloh的支持,感谢本站点所有人**绿色风(QQ:79664738)**的支持与奉献,特此鸣谢!
------本人网名**KevinChengCW(QQ:1210618015)**原ExcelTip.Net总版主之一