ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[原创] SUBSTITUTE函数可添加式批量替换的非VBA解决方案

[复制链接]

TA的精华主题

TA的得分主题

发表于 2014-8-19 09:58 | 显示全部楼层 |阅读模式
本帖最后由 z391634362 于 2014-8-20 11:28 编辑

前一段时间给部门的人设计表格模版,经常碰到这么个情况。

源数据中某一列文本,需要根据对应的条件批量替换字符,格局类似于VLOOKUP,左数据右条件。

按正常情况下,用SUBSTITUTE函数逐层套嵌就可以了,问题是条件区域动辄成百上千行,并且还要能让不会EXCEL的人傻瓜式添加条件。

因SUBSTITUTE函数不支持数组替换,又SUBSTITUTE套嵌工作量太大,由于我不会用VBA,就卡在了如何用函数公式解决这个问题。苦思良久,发现了用evaluate宏表函数来实现以上功能的方法。
问题.jpg

问题说明:
制作如下模版
1、  将A列内容根据D2:E8区域的条件替换成B列的文本
2、  D2:E8条件区域的内容可添加,并添加完内容后B列的内容自动更新

由于本人非IT专业,自学excel时日尚不足一年,略懂皮毛,此次班门弄斧,第一次发帖,望抛砖引玉,前辈们不吝赐教。

解决方案如下:
解决.jpg

核心思路:
1、  通过普通公式批量转换为SUBSTITUTE多层套嵌的文本公式(B列)
2、  用EVALUATE宏表函数转化文本公式(C列)

B列公式为:
=REPT("SUBSTITUTE(",COUNTA($F$2:$F$300))&CHAR(65)&ROW()&PHONETIC($E$2:$I$300)
通过COUNTA计算条件列的个数决定需要套嵌多少层SUBSTITUTE函数,重复次数由REPT实现。

转化后的文本公式如下:
SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(A2,"A","1"),"B","2"),"C","3"),"D","4"),"E","5"),"F","6"),"G","7")
引号、逗号、右括号都通过辅助列添加。

然后通过EVALUATE函数将文本公式转化为实际公式。
1、  自定义名称——引用位置=EVALUATE(答案!B2)
2、  在C2单元格输入=EVALUATE,向下填充即可。

到此模版已经完成。不懂EXCEL者只要将E8:I8的内容往下拖动,然后将F列和H列中的条件部分改成自己需要的内容即可。
条件区域.jpg

由于PHONETIC函数不支持公式,因此符号的辅助列部分需要手工添加。
首次发帖,希望大家支持。我所有的EXCEL知识都来自于EXCELHOME论坛及EXCELHOME系列图书。本人才疏学浅,此贴意在回报EXCELHOME对我极大的帮助。如有不妥,烦请指正。

(附件表格中含有宏表函数,打开前请启用宏)


substitute批量替换.zip (10.35 KB, 下载次数: 310)

评分

3

查看全部评分

TA的精华主题

TA的得分主题

发表于 2014-8-24 07:55 | 显示全部楼层
请继续努力,取得更大的成绩。

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-8-25 13:08 | 显示全部楼层
谢谢老师鼓励,必再接再厉,在EXCEL这条不归路上一条道走到黑^ ^

TA的精华主题

TA的得分主题

发表于 2014-8-25 15:58 | 显示全部楼层
先表示很佩服楼主,研究了以后学到不少东西。
发现一个使用中可能会碰到的问题,就是old_text和new_text左右的符号在录入替换条件时需要手动录入,否则会出错;不能提前录入,公式会出错;也无法用公式来自动录入,因为PHONETIC函数的参数不接受公式得到的文本。

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-9-21 17:40 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
mgblue 发表于 2014-8-25 15:58
先表示很佩服楼主,研究了以后学到不少东西。
发现一个使用中可能会碰到的问题,就是old_text和new_text左 ...

感谢支持。
你说的问题我也是意识到的,苦于无法解决。如果PHONETIC函数能支持公式就完美了。
其实我只是提供一个大批量使用SUBSTITUTE函数的小技巧。毕竟做模板的情况很少。
按这个思路,日常使用中遇到大批量套嵌substitute函数时不需要挨个手动输入,哪怕要套嵌几百次,先用rept函数重复个多少次SUBSTITUTE(,粘贴成数值,再把替换条件写下来,批量录入","、")"等符号,PHONETIC连起来,粘贴成数值,然后两边文本复制到进一个单元格,加个=号,就能快速生成一个SUBSTITUTE函数大批量套嵌的公式。

TA的精华主题

TA的得分主题

发表于 2015-3-3 23:52 | 显示全部楼层
感谢楼主的帖子,解决了我的问题:http://club.excelhome.net/thread-1189218-1-1.html
只是公式太复杂了,还不太彻底了解。而且楼主的说明和四楼的说明感觉也不太理解,E、G、I列的符号有什么用啊?是指定的吗?

TA的精华主题

TA的得分主题

发表于 2015-3-3 23:56 | 显示全部楼层
这个如果用VBA操作,方便吗?

TA的精华主题

TA的得分主题

发表于 2015-9-5 15:30 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2017-1-11 23:38 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2017-5-23 16:57 | 显示全部楼层
为什么在E8行再添加后就显示错误了呢?
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

关闭

最新热点上一条 /1 下一条

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

GMT+8, 2024-4-24 06:31 , Processed in 0.070588 second(s), 16 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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