VBA之正则表达式(47)-- 快速将公式转换为静态值计算

devtools/2024/10/15 20:17:37/

实例需求:工作表I列包含多种计算公式,为了便于演示,将I列公式显示在J列单元格中,现在需要将公式的单元格引用转换为静态值,如K列所示。

在这里插入图片描述

示例代码如下。

Sub RegExpDemoReplace()Dim Res()Dim objRegEx As ObjectDim objMH As Object, sRef As StringDim j As Integer, i As Long, sFormula As StringSet objRegEx = CreateObject("vbscript.regexp")objRegEx.Pattern = "([A-Z]{1,3}\d{1,7})"objRegEx.Global = TrueDim lastRow As Long, arrDatalastRow = Cells(Rows.Count, "I").End(xlUp).RowarrData = Range("I6:I" & lastRow).FormulaFor i = 1 To UBound(arrData)If Left(arrData(i, 1), 1) = "=" ThensFormula = arrData(i, 1) & " "Set objMH = objRegEx.Execute(sFormula)If objMH.Count > 0 ThenFor j = 0 To objMH.Count - 1sRef = objMH(j).submatches(0)sFormula = Replace(sFormula, sRef, Range(sRef))NextarrData(i, 1) = "'" & sFormulaEnd IfEnd IfNext[K6].Resize(UBound(arrData), 1).Value = arrDataSet objRegEx = NothingSet objMH = Nothing
End Sub

【代码解析】
第7行代码创建正则对象。
第8行代码设置正则匹配模式。
第9行代码设置正则全局匹配。
第11行代码获取最后数据行的行号。
第12行代码将I列公式保存在数组中。
第14行代码判断单元格中是否包含公式。
第15行代码执行正则匹配。
第17行代码判断是否匹配成功。
第18~21行代码循环处理每个匹配结果。
第19行代码读取匹配结果的子匹配。
第20行代码将单元格引用替换为静态值。
第22行代码将更新后的公式写入数组。
第26行代码公式写入工作表K列,当然此处也可以用于更新I列的公式。
第27~28行代码清空对象变量,释放系统资源。


请注意代码不适用如下几种场景:

  1. 公式中使用跨工作表引用,代码中Range(sRef)只能获取活动工作表引用单元格对应的静态值。
  2. 公式中存在多单元格引用区域,例如SUM(A1:C3)
  3. 单元格引用地址存在部分重复,例如公式 =A1+A100,需要优化代码首先替换A100,然后再替换A1,否则无法得到正确结果

http://www.ppmy.cn/devtools/102937.html

相关文章

APP渠道来源方案探索

APP渠道来源方案探索 文章目录 APP渠道来源方案探索一、App渠道来源的原理二、方案探索总结1、公司自行实现Web端归因统计方案2、采用第三方平台实现归因统计方案1、在第三方开发者平台创建应用2、移动端(iOS/android)SDK集成3、测试阶段上传ipa/apk包&a…

高翔【自动驾驶与机器人中的SLAM技术】学习笔记(九)imu运动学;lambda表达式;bind;function;std::move()

一、IMU运动学 1、测量值: 常用六轴IMU是由陀螺仪(Gyroscope)和加速度计(Acclerator)两部分组成。 陀螺仪测量:角速度。加速度计:加速度。 安装要尽量保证IMU的安装位置在车辆中心。避免由I…

使用STM32CubeMX新建工程

开发板:STM32h743xi 编程软件:Keil、STM32CubeMX 项目:GPIO外设操作(彩色LED灯) 学习打卡:Day1 学习地址:【野火】STM32 HAL库开发实战指南 教学视频 手把手教学STM32全系列 零基础入门CubeMXHA…

jQuery实现前端下载功能

js实现前端下载功能 前端代码 html代码 <div class"div_button_btn_span"><a href"#" class"easyui-linkbutton" iconCls"icon-ok" onclick"exportExcel()" plain"true">导出明细</a> </…

基于Spring Boot的陶瓷文化网站的设计与实现

毕业设计&#xff08;论文&#xff09; 论文题目&#xff1a;基于Spring Boot的陶瓷文化网站的设计与实现 博主可接毕设论文&#xff01;&#xff01;&#xff01; 摘 要 中国悠久的陶瓷艺术&#xff0c;作为民族文化遗产的重要载体&#xff0c;历经时代的洗礼&#xff0c;其…

数据库管理-第236期 数据库一体机的价值(20240829)

数据库管理236期 2024-08-29 数据库管理-第236期 数据库一体机的价值&#xff08;20240829&#xff09;1 误区2 硬件3 操作系统4 数据库总结 数据库管理-第236期 数据库一体机的价值&#xff08;20240829&#xff09; 作者&#xff1a;胖头鱼的鱼缸&#xff08;尹海文&#xff…

EXCEL试题

EXCEL试题 Excel 是__C__. A.数据库管理软件 B.文字处理软件 C.电子表格软件 D.幻灯片制作软件Excel工作簿文件的默认扩展名为__B__. A.doc B.xls C.ppt D.mdb在Excel 的操作界面中,整个编辑栏被分为左、中、右三个部分,左面部分显示 出,C A.活动单元格的行号 B.活动单元格的…

21:【stm32】定时器二:输入捕获

输出捕获 1、输出捕获的简介2、输入捕获原理2.1、输入滤波2.2、信号选择2.3、CCx事件和CCx中断 3、标准库编程 1、输出捕获的简介 定时器通过通道捕获输入电平的变化&#xff0c;而通道有CH1~CH4&#xff0c;这4个通道。 我们设定对通道CH3的输入电平进行捕获。假如CH3突然捕获…