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


前言

mid函数是一个字符串函数,作用是从一个字符串中截取出指定数量的字符。我遇到的使用场景是需要将几十个地址录入到顺丰批量寄件的模板中。
我拿到的地址是这样的:


而顺丰批量寄件的模板是这样的,需要把省市区详细地址分成四列填写:


一条一条录入那我还不如在顺丰小程序里面寄件。于是我就开始查找有没有能够截取字符的函数,找到了mid函数。

基础用法

函数语法如下:

=MID(text,start_num,num_chars)
  • text:必需,从哪儿提取内容
  • start_num:必需,提取的第一个字符的位置,以1开始
  • num_chars:必需,需要返回的字符长度

以下图为例:


需要提取省份,函数应该为:

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

提取详细地址:

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

最终效果如下:

进阶用法

但是,上面这个函数不能满足实际的需要,因为地名的长度不都是两个字


这个时候可以加入FIND函数。

=FIND(find_text, within_text, [start_num])
  • 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)

最终效果:

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

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


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

这个函数将返回三个值,县、市、区分别的位置,但是肯定有两个是找不到的,会返回#VALUE!


这个时候再使用IFERROR函数,对报错的两个进行赋值。

=IFERROR(value, value_if_error)
  • value:必需,检查是否存在错误的参数
  • value_if_error:必需,如果有错误,该赋予他的值

此处函数这样写:

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

为什么要赋1000呢,原因接着往下看。
这个时候就会返回三个值,1000、市所在的位置、1000。


接着把1000去掉,只留11,使用MIN函数。

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



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

不足之处

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

声明:wan喜的小站|版权所有,违者必究|如未注明,均为原创|本网站采用BY-NC-SA协议进行授权

转载:转载请注明原文链接 - Excel 使用 MID 函数提取地址里的省市区


折腾使我快乐