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

news2024/9/23 17:22:22

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

在这里插入图片描述

示例代码如下。

Sub RegExpDemoReplace()
    Dim Res()
    Dim objRegEx As Object
    Dim objMH As Object, sRef As String
    Dim j As Integer, i As Long, sFormula As String
    Set objRegEx = CreateObject("vbscript.regexp")
    objRegEx.Pattern = "([A-Z]{1,3}\d{1,7})"
    objRegEx.Global = True
    Dim lastRow As Long, arrData
    lastRow = Cells(Rows.Count, "I").End(xlUp).Row
    arrData = Range("I6:I" & lastRow).Formula
    For i = 1 To UBound(arrData)
        If Left(arrData(i, 1), 1) = "=" Then
            sFormula = arrData(i, 1) & " "
            Set objMH = objRegEx.Execute(sFormula)
            If objMH.Count > 0 Then
                For j = 0 To objMH.Count - 1
                    sRef = objMH(j).submatches(0)
                    sFormula = Replace(sFormula, sRef, Range(sRef))
                Next
                arrData(i, 1) = "'" & sFormula
            End If
        End If
    Next
    [K6].Resize(UBound(arrData), 1).Value = arrData
    Set objRegEx = Nothing
    Set 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.coloradmin.cn/o/2078424.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

零基础5分钟上手亚马逊云科技-NLP文字理解AI服务

简介: 欢迎来到小李哥全新亚马逊云科技AWS云计算知识学习系列,适用于任何无云计算或者亚马逊云科技技术背景的开发者,通过这篇文章大家零基础5分钟就能完全学会亚马逊云科技一个经典的服务开发架构方案。 我会每天介绍一个基于亚马逊云科技…

android gradle 配置国内gradle地址

1. 地址: 腾讯云镜像 Gradle下载地址:https://mirrors.cloud.tencent.com/gradle/ 阿里云镜像 Gradle下载地址:https://mirrors.aliyun.com/macports/distfiles/gradle/ 阿里云镜像 Gradle下载地址:https://mirrors.aliyun.com…

Python酷库之旅-第三方库Pandas(102)

目录 一、用法精讲 441、pandas.DataFrame.mask方法 441-1、语法 441-2、参数 441-3、功能 441-4、返回值 441-5、说明 441-6、用法 441-6-1、数据准备 441-6-2、代码示例 441-6-3、结果输出 442、pandas.DataFrame.query方法 442-1、语法 442-2、参数 442-3、功…

【C++题解】1223. 汉诺塔的移动次数

欢迎关注本专栏《C从零基础到信奥赛入门级(CSP-J)》 问题:1223. 汉诺塔的移动次数 类型:函数、递归基础 题目描述: 汉诺塔的问题大家都已经很熟悉了,有三个柱子,每个柱子上有一些大小不一的金…

Python(C)图像压缩导图

🎯要点 傅里叶和小波变换主成分分析彩色图压缩制作不同尺寸图像K均值和生成式对抗网络压缩无损压缩算法压缩和解压缩算法离散小波变换压缩树结构象限算法压缩矩阵分解有损压缩算法量化模型有损压缩算法JPEG压缩解压缩算法 Python图像压缩 图像压缩可以是有损的&…

Gazebo Harmonic gz-harmonic 和 ROS2 Jazzy 注意事项

激光显示 点呈现 射线呈现 rviz2 新旧版本并存的混乱 本教程旨在为在Ubuntu Jammy(最新支持Gazebo Classic包的Ubuntu版本)上运行Gazebo Classic(如Gazebo 11)的用户提供指导,这些用户计划将其代码迁移到新的Gazebo版…

大语言模型(LLMs)全面学习指南

大语言模型(LLMs)作为人工智能(AI)领域的一项突破性发展,已经改变了自然语言处理(NLP)和机器学习(ML)应用的面貌。这些模型,包括OpenAI的GPT-4o和Google的gem…

泛运动生态持续破圈,重估Keep时刻来临

在中国超40万亿的庞大消费市场中,从不缺少“燃点”。 前不久举办的巴黎奥运会,就带火了国内规模空前的“奥运经济”。在诸多品牌助力下,这股运动消费热潮持续破圈。 比如,运动科技公司Keep通过发布主题为《心火已燃》的品牌TVC&…

生信圆桌x生信友好期刊:助力生物信息学研究的学术平台

介绍 生物信息学作为一门交叉学科,近年来得到了快速发展。为了促进生信领域的科研交流,许多学术期刊开始关注并专门发表生物信息学相关的研究成果。这些期刊被称为“生信友好期刊”,它们为研究人员提供了一个展示和传播最新科研成果的重要平…

怎么成为ChatGPT使用大神?

成为高效使用ChatGPT的高手,可以通过以下几个方面来提升你的使用体验和效果: 1. 清晰明确的提问 明确问题:尽量将问题表述清楚、具体。例如,“如何提高文章写作技巧?” 比 “写作技巧” 更具体。提供上下文&#xf…

UnrealEngine学习(01):安装虚幻引擎

1. 下载安装 Epic Games 目前下载UE引擎需要先下载Epic Games,官网为我们提供了下载路径: https://www.unrealengine.com/zh-CN/downloadhttps://www.unrealengine.com/zh-CN/download 我们点击图中步骤一即可进行下载。 注释:Unreal Engi…

AI嵌入式开发 ---- pt模型文件 -> ONNX模型 -> rknn模型 -> 部署到RK3588开发板上(以yolov5为例)

目录 一、前言 1.1 任务 1.2 开发板下跑预训练模型流程 二、pt 文件转换为 onnx 或 TorchScript 文件(平台:x86机器Windows系统) 二、将 .onnx 模型文件转换为 .rknn 模型文件【平台:x86上的 Linux虚拟系统】 三、在 Linux虚…

python爬虫控制aiohttp并发数量方式例子解析

在使用Python的aiohttp库进行爬虫开发时,控制并发数量是一个重要的环节,以避免对目标网站造成过大压力或触发反爬机制。以下是一些控制并发数量的方法和示例: 使用Semaphore限制并发数:Semaphore(信号量)是…

用大模型学习大模型-40问掌握大模型入门知识点(上)

采用提问方式,从个人知识盲点开始,渐进式掌握大模型入门知识点。‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍ 1、大模型中7b、70B代表什么 在讨论人工智能领域特别是大型语言模型(LLMs)时,“7b”和“70B”均…

【Kotlin设计模式】Kotlin实现装饰器模式

前言 装饰器模式(Decorator Pattern),用于动态地为对象添加新功能,而无需修改其结构,通过使用不用装饰类及这些装饰类的排列组合,可以实现不同的功能和效果,但是这样的效果就是会增加很多类&…

debian12 - rsyslog的安装/配置/使用

文章目录 debian12 - rsyslog的安装/配置/使用概述笔记实现main.cppmy_syslog.hmy_syslog.cppMakefileMakefile的准备工作END debian12 - rsyslog的安装/配置/使用 概述 以前在debian7.5中用syslog可以。 现在准备在debian12虚拟机中做个rsyslog的实验,看syslog还…

2024年PDF转换成PPT三步走,职场小白秒变高手

这个信息满天飞的时代,我们几乎天天都得处理一堆文件,PDF和PPT这对搭档简直就是我们工作学习中的老面孔。你有没有碰到过这种头疼事:急着要把PDF转成PPT来准备个演讲,但就是找不到个又快又好使的招?别慌,今…

一文搞懂大模型!基础知识、 LLM 应用、 RAG 、 Agent 与未来发展

LLM 探秘:想要深入了解人工智能界的“新宠”大型语言模型(LLM)吗?本文将带你走进 LLM 的世界,从入门知识到实际应用,全方位解读这个充满魔力的“大模型”。我们将一起揭开 LLM 的神秘面纱,领略其…

代码随想录算法训练营第三十九天 | 198.打家劫舍 , 213.打家劫舍II , 337.打家劫舍III

目录 198.打家劫舍 思路 1.确定dp数组(dp table)以及下标的含义 2.确定递推公式 3.dp数组如何初始化 4.确定遍历顺序 5.举例推导dp数组 方法一: 动态规划-一维 方法二:动态规划-二维 方法三:动态规划-两个变…

零知识证明-基础数学(二)

零知识证明(Zero—Knowledge Proof),是指一种密码学工具,允许互不信任的通信双方之间证明某个命题的有效性,同时不泄露任何额外信息 导数、偏导数 ,互质数,费马小定理,欧拉定理 1 导数 导数是微积分学中的重要概念&am…