数据处理无小事,正如没有人活在真空理想环境一下,在数据分析过程中,也没有那么真空理想化的数据源可以使用,数据处理占据数据分析的80%的时间,每一个小小的改善,获益都良多。 Excel查找替换,有其局限性所在,此篇再次对查找替换这样的高频的操作进行补充,问鼎100篇之后,仍然回归初心,在数据处理的路上不断添砖加瓦,打造最优秀的精品工具。
使用场景
在Excel过往的大量功能辅助中,其实很少使用替换这样的操作,因为对数据源进行了无法回溯还原的破坏作用。
更多的时候,是推荐使用自定义函数,根据原有的数据源,经函数转换后生成新的符合要求的数据结果,所以在Excel催化剂中,有大量的自定义函数来支持数据处理、转换的环节。
但对某特定的场景下,原有数据可以接受永久性更新操作,替换旧的有数据,这时使用替换操作,也是合适恰当的,例如需要将标题行的原标题改为更符合阅读习惯的更有意义的标识。
在地图数据功能中大量出现的原英文标题
在这种情形下,如果手头固定维护一个映射表,可以一次性将其替换,就比较完美。
列标题的映射表关系
同样地,若某表格数据中,有一些过时的名称叫法,需要将其重新批量命名为新的名字,因Excel的数据源不像在关系数据库里那般整齐规范,数据有可能不止在一列内容上,还分散在多列的内容上,此时,自定义函数的处理仍不是最理想,可以考虑用替换的方式去覆盖旧的过时数据,在再次分发传播中,新的定义叫法更符合日常的数据使用和二次引用。
Excel原生查找替换功能的缺陷
鉴于上述的场景,使用Excel的原生功能,虽然大部分还是可以解决,但仍然偏繁琐,不能一次到位的以人逻辑提炼的方式实现。有多少个要替换的内容,就要反复操作多少篇,如果是偶发性的行为,还勉强可以接收一下(但手工操作仍然有出错的风险,多次操作,头晕眼花的情形是时有发生的)。
对于特定的情景,特别是字符串世界中,各种杂乱的数据,但仍然有所规律可循时,如果单纯地只有Excel的原生的区分大小写,精确模糊匹配等方式,远远不能胜任实际的数据场景。
正则表达式的引入
在字符串处理的世界中,正则表达式的处理方式永远不能让其缺席,有了正则处理,字符串的世界才趋于听话。
正则表达式,笔者是非常推荐的,固然有一点点的学习成本,但学成之后,使用场景十分广阔,特别是日常工作中需要和数据打交道的人员,十分值得花心思入门学习一下。
在Excel催化剂的自定义函数、文本处理等功能上,已经有大量正则表达式的封装,让一般的用户可以无需编程环境下,即可在Excel上轻松使用正则表达式。
此篇的批量替换功能,也不落空,必然要将正则表达式进行引入,扩展Excel的原生功能的不足。
替换方式的追加
Excel原生的替换方式,只能对匹配的内容进行替换,如单元格内的内容为:“ABC123456”,当需要查找含ABC关键字的单元格时,是没法对其单元格的内容全部替换为某个值如“CDE”,只会替换成“CDE123456”的效果。
但实际中,可能更想要的是只要找到含ABC的,就直接替换成映射表中的CDE的值。在这方面,本篇会进行扩展,实现这样的需求。
对处理大量数据时的性能瓶颈问题
若存在一个数据量大的表,尝试使用Excel原生的查找替换的话,会非常慢,特别是使用正则的扩展方式,如果还是在用COM的方式来访问Excel文件并处理的话,慢得非常难于忍受,此时可尝试Excel催化剂使用EPPLUS读写Excel的方式,性能有大幅度的提升。
当然如果数据量不大,仅替换下标题几个单元格甚至几百几千的单元格,性能不会成为大问题。
功能实现
经过上述的描述,一个简单的查找替换,也是需要考虑许多的问题和场景需要的,Excel催化剂很多时候的确是把功能做复杂了,对于初级用户来说。
但日常的工作,不会因为你是初级用户,问题就会自动跳过,问题的存在复杂性,必要会让功能的使用上配合到其通用性的设计而同步地变得复杂起来。
所以,需要使用上Excel催化剂的所有功能,仍然需要自己有努力的上进心,勇于解决一些日常难题并乐于静下心来认真地琢磨才能学到手。
相对于将功能封装成一个通用性出口,只需简单的界面操作的开发过程来说,学习功能的使用,已经是十分简单的了。
愿意花上一些时间来弄透它,总比每次每日每夜地去做那些996环境下的低效、重复性、出错率高的工作有价值得多。
功能入口
注意:此功能会对原文件带来数据的破坏作用,请务必进行文件备份再进行操作。
操作步骤
步骤一:选定要处理的数据源区域
如果是对整个工作薄操作,这一步的数据源区域引用,在后续的使用上将忽略,而转为使用整个工作薄所有单元格。如需处理整个工作表内容,可全选整个工作表,后续程序会进行范围缩减,不会因为全选所有单元格而引起性能过慢。
替换的单元格中,只会进行非公式的单元格内容替换,如果是公式生成的内容,将不会进行处理(因其会出现一些不可预料的错误和实际场景并非必须而直接跳过了)
步骤二:选择要替换的映射表数据区域
映射表只有两列,首列是查找值或正则表达式的匹配字符,第二列是要替换到为的内容。需要有标题行。如下图所示。
映射表结构
步骤三:配置需要的匹配规则
若所选择的区域不对,可重新选择。 可根据自己数据处理的逻辑,各复选框进行勾先或去勾选。
【替换整个单元格内容】即为以上所述的,当找到有匹配的单元格,即将其单元格的内容用对应行的返回值全部替换,而不是只替换匹配到的部分字符,其他字符保留。
匹配规则
批量替换后的结果
因可供匹配的信息太多,未能对所有情形进行测试,请务必进行保存备份后再操作,也欢迎反馈实际使用过程中出现的bug,让程序及时得以修复,更健壮。
结语
能够跟随Excel催化剂走过这100波功能的朋友,必定是真正愿意成长进步的群体。
时不是有人反馈说学Excel催化剂就像重新学一个软件一样,那还真是,但学习它必定是超值回报的,因它已经是站在Excel巨人的基础上去开发出来的系列功能,并不是一般性软件只是满足特定的细小领域,学习Excel催化剂,也如同Excel一样,所有的功能,都可以复用到非常广阔的应用场景中。
最后,对那些未能轻松跟上Excel催化剂学习步伐的同学们,Excel催化剂将在接下来的日子里,着重性地对过往的101波功能进行场景化的视频教学,将各个看似分散孤立的功能进行串讲,使用实际日常工作中的真实场景,让广大Excel用户们更直观地掌握并且可以快速地应用在自己的实际工作中,带来真实的成效,欢迎持续关注。