ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
123
返回列表 发新帖
楼主: 淘朴

[已解决] 批量多字符串多次替换

[复制链接]

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-1-10 21:02 | 显示全部楼层
飞天篮球猪 发表于 2019-1-10 20:05
下午的那个方法欠考虑,你可以忽略掉,不要用了。有点不好意思,浪费时间了。
当然,List.ReplaceMatchi ...


这个算法要完善些,用于不相重的字符串替换没问题。有少数几个英文字符替换不了:


逗号,逻辑非,问号,|?

这3个涉及运算问题,可以手动解决,感谢你啦。   Power Query,在运算中,比较有用,我先熟练下这个的应用

TA的精华主题

TA的得分主题

发表于 2019-1-10 21:08 | 显示全部楼层
本帖最后由 飞天篮球猪 于 2019-1-10 21:14 编辑
淘朴 发表于 2019-1-10 21:02
这个算法要完善些,用于不相重的字符串替换没问题。有少数几个英文字符替换不了:

逗号,逻辑非,问 ...

你把那些没有替换掉的符号维护到替换对照表里就可以了,维护好后,右键那个加载过来的表,刷新。正常来说,只要对照表里有的都可以替换掉。
比如“| ” 后边有空格和“|”视为不一样的两个。
问号,逗号,叹号有中文状态的和英文状态的等等。

如果能用正则替换,那是比较好的。Power Query里用正则处理大数据效率极其低下。所以不采用。
你可以另寻高人指点其它途径的正则用法。

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-1-10 21:35 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
谢谢,学习您的算法了。小部分字符出问题,如下为通过新的算法,运算后替换不了的。

,|?-

批量替换确实容易出现问题。前3个为英文字符,第4个横杠-为中文全角字符。  这个算法已经比较完善了,如果不考虑单个字符,用于字符串替换已经比较理想,感谢。

TA的精华主题

TA的得分主题

发表于 2019-1-10 21:46 | 显示全部楼层
淘朴 发表于 2019-1-10 21:35
谢谢,学习您的算法了。小部分字符出问题,如下为通过新的算法,运算后替换不了的。

,|?-

这些字符都能替换掉。从源文本里把这些符号复制出来粘贴到对照表,刷新后肯定能替换。
只要对照表里有的,都可以替换掉,这个我还是有自信的。
其它不可预见的,就无法预见。。。lol。。。

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-1-10 22:23 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
飞天篮球猪 发表于 2019-1-10 21:46
这些字符都能替换掉。从源文本里把这些符号复制出来粘贴到对照表,刷新后肯定能替换。
只要对照表里有的 ...

从源文本中复制粘贴要替换的字符后,这几个没替换掉的字符,也解决了,完美, 感谢感谢

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2019-4-5 11:31 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
飞天篮球猪 发表于 2019-1-10 20:05
下午的那个方法欠考虑,你可以忽略掉,不要用了。有点不好意思,浪费时间了。
当然,List.ReplaceMatchi ...

如截图,
在对照表里面删除某一行数据之后, 点击"刷新"按钮, 目标结果列就会出现全部为空的问题.

因为有时候需要编辑删除对照表中的某些行, 所以可以怎么优化下M函数来避免这一现象吗?

谢谢.
QQ截图20190405111448.png

TA的精华主题

TA的得分主题

 楼主| 发表于 2020-10-14 10:52 | 显示全部楼层



两种解法.png


本贴最终获取了2种可靠的解法,Excel批量利用对照表进行替换,是替换提高效率极为有效的方法。  上传解决案例文档如下,供论坛大家使用。

批量多字符串多次替换—Power Query VBA 两种解法.zip (1.99 MB, 下载次数: 75)

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2020-10-14 14:36 | 显示全部楼层
淘朴 发表于 2020-10-14 10:52
本贴最终获取了2种可靠的解法,Excel批量利用对照表进行替换,是替换提高效率极为有效的方法。 ...

快要两年的帖子,楼主还回来总结,看来它对你有些重要啊。

那我就把用VBA正则处理的方法也列出一下吧。不需要对照表,依据的就是字符本身的特征规律。

  1. '无需对照表,直接用正则表达式:排除需要转义的字母和数字,提取剩余的汉字、字母和数值(含正负的整数、小数、百分数)
  2. Sub 正则替换()
  3.     Dim reg As Object, ar, r&, i&, tmp$, ma As Object
  4.     Set reg = CreateObject("VBScript.RegExp")
  5.     reg.Global = True
  6.     reg.Pattern = "&(?:[a-z]+|#\d+);|((?:-?\d*\.?\d+%?|[一-龥a-zA-Z])+)|[\d\D]"
  7.     ar = Sheets("VBA解法").UsedRange.Resize(, 1) '获取指定表格的第一列数据。
  8.     r = UBound(ar)
  9.     For i = 2 To r
  10.         ar(i, 1) = RTrim(Replace(reg.Replace(ar(i, 1), "$1 "), "  ", "&@"))
  11.     Next
  12.     ar(1, 1) = "正则替换后" '修改标题
  13.     Range("C1").Resize(r) = ar '把处理的结果填入C列
  14. End Sub
复制代码

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2020-10-14 19:15 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
ggmmlol 发表于 2020-10-14 14:36
快要两年的帖子,楼主还回来总结,看来它对你有些重要啊。

那我就把用VBA正则处理的方法也列出 ...

两年之前,已经总结完。没传总结的文件,确实,这个批量替换,是这2年最常用的工具,用的比较频繁

TA的精华主题

TA的得分主题

发表于 2023-4-3 15:46 | 显示全部楼层
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-9-28 05:23 , Processed in 0.033716 second(s), 8 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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