产品文档 / Excel催化剂
第43波-文本处理类函数增强
Excel的函数有400多个,真正常用的50多个,而常有的文本处理类函数也不多,不是因为文本类处理简单,而是Excel真的有点挤牙膏式的每个版本更新那么几个小函数,普通用户等得急切,但实际上这些小函数,自己用自定义函数实现一下,还比官方的更好用。本篇再次对文本处理类函数做了扩展,更方便文本处理。部分
Excel的函数有400多个,真正常用的50多个,而常有的文本处理类函数也不多,不是因为文本类处理简单,而是Excel真的有点挤牙膏式的每个版本更新那么几个小函数,普通用户等得急切,但实际上这些小函数,自己用自定义函数实现一下,还比官方的更好用。本篇再次对文本处理类函数做了扩展,更方便文本处理。部分函数高级用户其实使用正则处理类函数体验更佳。
文本处理函数
在Excel2016中提供了一个TEXTJOIN的文本函数,好多Excel群友时不是就冒一句说要找这个函数,Excel像挤牙膏一样,这么多年来,拖到2016版才发布这么一个小白级别的函数,也只是醉了,这样的功能,随便一个VBA学习者都能写得出来。当然今天Excel催化剂也有此功能的函数,但比Excel2016提供的原生功能更好用,想得更远。
一般DotNet程序猿可以使用大量微软团队写好的函数,但Excel用户却没这样的福气,Excel催化剂也当搬运工,把这些DotNet的文本处理类函数搬到Excel环境中,供普通大众来使用。

同时因一般普通用户使用正则处理函数,特意重新封装了常用的撷取替换函数

StringJoin函数
对标原生Excel2016中提供的TEXTJOIN函数
特别加上最后一个参数,可以包围每个拼接的字符串项,在写SQL语句时的IN条件时,经常会用到单引号包围着字符串项的效果。


StringJoinIf函数
一般在各种文章、书籍中都有介绍类似VLOOKUP的查找引用功能,但需要一对多的查找方式,返回多个值。各种复制套路流传着,其实更好的方式是返回的多值放到一个单元格里,故开发了类似SUMIF的聚合函数效果,只是此时聚合的是字符串,结果是字符串拼接在一起返回。


TextSplit
前面是拼接字符串,此函数相反是拆分字符串,TextSplit返回一个值,返回的值由最后参数控制,
TextSplits返回所有值,返回结果可按行或按列排列。
切割字符串可以是单个也可以是多个,多个时中间用逗号隔开或者直接引用多个切割符号对应的单元格(连续单元格区域)
函数具体的效果如下:

其他简单文本处理函数
从DotNet里把现有的文本处理函数作了简单封装拿到Excel中来。

提取替换函数
分别对常用的数字、中文、英文作了单独的函数封装,在第25波的文本处理功能时也有过相应的实现,不过那不是自定义函数,对原始数据有破坏作用,一般建议用函数新开一列来处理数据更为合适。

这里特别增加两个指定提取和指定替换功能,方便部分需要指定特定字符的功能时使用。
其中较为特别的是MatchString这个匹配文本。
中间用逗号可指定多个文本,逗号间又区分了只有一个字和多个字的情况。
- 只有一个字时,如下图中的 ”中“,”f“。
只要出现过这一个字即可,多个一个字时可排列组合出多个匹配结果,如A,B,C三个单个的字符,可以匹配A/AB、AC、ABC、ACB、B、BC、BA、BAC、BCA、C、CA、CB、CAB、CBA等结果 - 多个字符一起时,如下图中的“美国”
仅匹配此多个字符的完整匹配,如ABC,BC的MatchString,仅对源文本中的ABC和BC两项匹配。

总结
一口气发布了众多的文本处理函数,可想而知,日常文本处理过程的繁杂程度,函数越多,效率越高。较Excel的挤牙膏式的新增函数速度,不要想有多大的提升空间。同时依赖Excel版本而有的函数,在文件共享时也存在较大问题,用自定义函数的话,几乎没有此后顾之忧,同时可实现更为灵活的使用。希望本篇的函数能够帮助各位在数据处理特别是在文本处理能力上更上一层楼。