ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 Excel Home精品图文教程库
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
300集Office 2010微视频教程 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 500|回复: 5

vba进行大量的文本替换如何优化实现?

[复制链接]

TA的精华主题

TA的得分主题

发表于 2023-1-31 11:19 | 显示全部楼层 |阅读模式
采用VBA的方式进行替换文本的时候由于需要替换的数量比较多,需要替换的文本数据成千上万条,一条一个的替换比较麻烦,运行的时间需要比较长,有什么方法可以简单快捷的实现替换文本,而不需要像下面的代码一样逐条去执行?原始代码如下:


Columns("C:C").Select
     Selection.Replace What:="*张三*", Replacement:="", LookAt:=xlPart, _
        SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
        ReplaceFormat:=False
    Selection.Replace What:="*李四*", Replacement:="", LookAt:=xlPart, _
        SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
        ReplaceFormat:=False
    Selection.Replace What:="*王五*", Replacement:="", LookAt:=xlPart, _
        SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
        ReplaceFormat:=False
    Selection.Replace What:="*世界*", Replacement:="", LookAt:=xlPart, _
        SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
        ReplaceFormat:=False
    Selection.Replace What:="*日本*", Replacement:="", LookAt:=xlPart, _
        SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
        ReplaceFormat:=False
    Selection.Replace What:="*欧洲*", Replacement:="", LookAt:=xlPart, _
        SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
        ReplaceFormat:=False
    Selection.Replace What:="*地球*", Replacement:="", LookAt:=xlPart, _
        SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
        ReplaceFormat:=False
    Selection.Replace What:="*还有很多其他的文本*", Replacement:="", LookAt:=xlPart, _
        SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
        ReplaceFormat:=False

……
……

TA的精华主题

TA的得分主题

发表于 2023-1-31 14:35 | 显示全部楼层
以上代码简化如下
image.png

TA的精华主题

TA的得分主题

发表于 2023-1-31 14:36 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2023-1-31 15:12 | 显示全部楼层
数量太多的话,把不一样的地方提取出来做二维数组,一样的地方用循环结构。
不会VBA,但是我写一个JSA给你看看,但凡学过一点编程思路都一样,自己照着改吧。
function 复数内置替换(){
        Selection.Replace("张三","金", xlPart, xlByRows, false, false, true, true);
        Selection.Replace("李四","木", xlPart, xlByRows, false, false, true, true);
        Selection.Replace("王五","水", xlPart, xlByRows, false, false, true, true);
        Selection.Replace("世界","火", xlPart, xlByRows, false, false, true, true);
        Selection.Replace("日本","土", xlPart, xlByRows, false, false, true, true);
        Selection.Replace("欧洲","阴", xlPart, xlByRows, false, false, true, true);
        Selection.Replace("地球","阳", xlPart, xlByRows, false, false, true, true);
}
function 数组替换(){
        const a=[
                                ["张三"        ,"金"],
                                ["李四"        ,"木"],
                                ["王五"        ,"水"],
                                ["世界"        ,"火"],
                                ["日本"        ,"土"],
                                ["欧洲"        ,"阴"],
                                ["地球"        ,"阳"]
                        ];
        for (var i=0;i<a.length;i++)
        {
                Selection.Replace(a[i][0],a[i][1], xlPart, xlByRows, false, false, true, true);
        }
}

TA的精华主题

TA的得分主题

发表于 2023-1-31 16:40 | 显示全部楼层
最近正好学到这里,传个附件看看,当练习题了

TA的精华主题

TA的得分主题

发表于 2023-1-31 17:16 | 显示全部楼层

在数组后面直接添加就行了,用半角逗号分割,引号标注
    arr = Array("张三", "李四", "王五", "世界")
    For i = 0 To UBound(arr)
        Columns("C:C").Replace What:="*" & arr(i) & "*", Replacement:="", LookAt:=xlPart, ReplaceFormat:=False
    Next
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-6-26 07:32 , Processed in 0.031174 second(s), 11 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表