开头照例是回忆或吐槽,可以跳阅正文。
0
刚来这家公司时,才知道只有我一个IT人员,老板还很高兴地说,你看,正好原来的IT要走。不该走的走了,我就是来填坑的。
一直以为IT会有个部门,没有一大班人,也有好几个,其乐融融,互相学习帮助提高进步,结果就我一个人,什么事都找我,管你懂不懂,得自己找资料自己学,做一件学一件,东偷西抄,坚持下来,技术不一定提高很多,记忆力倒是最重要的,解决问题就靠个记性好,只要不是新问题,我能抢答。
1
一些网络管理场景中,需要把网卡MAC地址按固定格式录入,但收集来的MAC地址格式各异,有的是AA:BB:CC:DD:EE:FF,还有的是AA-BB-CC-DD-EE-FF,需要把它们整合成不带符号的格式:AABBCCDDEEFF。
开始我使用Excel的SUBSTITUTE函数,它的语法是
SUBSTITUTE(text,old_text,new_text,[instance_num])
参数中,前三个text、old_text、new_text是必需,text是需要替换其中字符的文本或单元格,old_text需要被替换的文本或字符,new_text是用于替换old_text 的文本或字符。最后的instance_num是可选的,指定要将第几个old_text 替换为new_text,如果不指定,可以不写。
另外SUBSTITUTE函数区分大小写。反正我只替换中横线和冒号,倒不用管这个问题,只要用空字符替换就成:
SUBSTITUTE(SUBSTITUTE(A1,"-",""),":","")
检查替换两次,完成整个替换过程。
不过后来又出现一种形式,一些同事抄报的MAC地址是手录的,直接使用中文冒号来分隔,于是上面的Excel公式来改成三个SUBSTITUTE。但是后来想想,有中文冒号,也一定有中文的横线符号,如果分隔符号增多,这个公式不是也要再加SUBSTITUTE,为了让公式漂亮点,我把 SUBSTITUTE换成了TEXTJOIN和TEXTSPLIT。
TEXTSPLIT是分隔函数,可以分隔行和列,它的语法如下:
TEXTSPLIT(text,col_delimiter,[row_delimiter],[ignore_empty], [match_mode], [pad_with])
text是要拆分的文本,col_delimiter是列分隔符,这两个是必须出现的,后面的参数都是可选的。row_delimiter行分隔符;ignore_empty默认值为FALSE,允许连续的分隔符将,就是多个连续的分隔符将会分隔出空的单元格,如果是TRUE,多个连续的分隔符将当成一个处理,忽略空的单元格出现;match_mode默认值为0,区分大小写,如果为1不区分大小写;pad_with,用于数据不足时的填充数据,默认值为 #N/A。
后面的参数不理解也不要紧,反正用的少,使用默认值就行。最关键的还有一条,如果存在多个分隔符,使用数组常量,正适合我的情况,我目前有3个分隔符,且只要分列(加上分行,将有更多用处,有兴趣的可以自己试试,也不用记,反正现在有AI会帮你记)。
这样可以把英文中横线、英文冒号和中文冒号作为列分隔符,
TEXTSPLIT(A1,{"-",":",":"})
分隔符使用后就相当于消失了,一组MAC地址就分成了不带符号的6个部分,下面就是要把这6个部分组合起来,需要用到TEXTJOIN,它的语法:
TEXTJOIN(分隔符, ignore_empty, text1, [text2], …)
分隔符是把各部分文本串起来时使用的连接符,我这里是要把6个部分的直接串起来,所以不用任何符号,就用空字符""。ignore_empty也是必需的参数,如果为TRUE,则忽略空白单元格,FALSE则保留空单元格作为一列数值加入,只有有明显分隔符时才能看出区别:
=TEXTJOIN("、",TRUE,"aaa","","bbb") 结果是aaa、bbb
=TEXTJOIN("、",FALSE,"aaa","","bbb") 结果是aaa、、bbb
后面的text1、text2等就是要合并的字符串或单元格。
由此我的SUBSTITUTE公式改成:
TEXTJOIN("",TRUE,TEXTSPLIT(A1,{"-",":",":"}))
这样是不是更简洁,以后有新的符号加入,直接在数组中添加就行了。
以上的TEXTJOIN和TEXTSPLIT两个函数在较新版本的Excel中支持,如果你的Excel没用,除了升级外,可以试试较新版的WPS,如果不想换,只能考虑用老的函数替代了。
>> 除非说明均为原创,如转载请注明来源于http://www.stormcn.cn/post/2413.html

