Excel 使用 MID 函数提取地址里的省市区
in 折腾软件 with 0 comment

Excel 使用 MID 函数提取地址里的省市区

in 折腾软件 with 0 comment

前言

mid函数是一个字符串函数,作用是从一个字符串中截取出指定数量的字符。我遇到的使用场景是需要将几十个地址录入到顺丰批量寄件的模板中。
我拿到的地址是这样的:
20201105111712.png
而顺丰批量寄件的模板是这样的,需要把省市区详细地址分成四列填写:
20201105112154.png
一条一条录入那我还不如在顺丰小程序里面寄件。于是我就开始查找有没有能够截取字符的函数,找到了mid函数。

基础用法

函数语法如下:

=MID(text,start_num,num_chars)

以下图为例:
20201105114235.png
需要提取省份,函数应该为:

=MID(A2,1,2) #注意:Excel里面中文算一个字符

提取详细地址:

=MID(A2,10,100) #如果num_chars长度比提取的内容长,就会返回文本结尾的字符。

最终效果如下:
Video_20201105134923.gif

进阶用法

但是,上面这个函数不能满足实际的需要,因为地名的长度不都是两个字
20201105115600.png
这个时候可以加入FIND函数。

=FIND(find_text, within_text, [start_num])
=FIND("省",A2) #返回3

提取省份:

=MID(A2,1,FIND("省",A2)-1) #返回湖北

提取市:

=MID(A2,FIND("省",A2)+1,FIND("市",A2)-FIND("省",A2)-1)

提取详细地址:

=MID(A2,FIND("区",A2)+1,100)

最终效果:
Video_20201105164531.gif

再进一步用法(用处不大,纯属兴趣)

但是,县级行政区不只有区,还有县级市和县,我想用一个函数来完成查找。函数如下:


=FIND({"县","市","区"},A2,9) #从第9个字符开始查找,是为了避免找到xx省xx市的“市”

这个函数将返回三个值,县、市、区分别的位置,但是肯定有两个是找不到的,会返回#VALUE!
Video_20201105171107.gif
这个时候再使用IFERROR函数,对报错的两个进行赋值。

=IFERROR(value, value_if_error)

此处函数这样写:

=IFERROR(FIND({"县","市","区"},A2,9),1000)

为什么要赋1000呢,原因接着往下看。
这个时候就会返回三个值,1000、市所在的位置、1000。
Video_20201105171834.gif
接着把1000去掉,只留11,使用MIN函数。

=MIN(IFERROR(FIND({"县","市","区"},A2,9),1000))

Video_20201105172115.gif
成功!准确找到了位置后接下来就好办了,不再赘述。
所以IFERROR函数赋值1000就是因为不管地名有多长,查找到的位置都会比1000小,使用MIN函数就能只能想要的值了。

不足之处

函数已经写的很长了,但还是有局限性,遇到自治区、自治州、直辖市这些特殊的就地名就不管用了。思来想去,好像没有找到合适的解决方法,借用VBA也许可以,但是奈何才学疏浅。
Github上有类似的开源项目,原理好像是将国内所有地址都录入数据库,再逐一比对,实现原理也不一样。
有时间再寻找更加完美的方案吧。

Responses