EXCEL
IF函数、ISNUMBER函数、FIND函数、MID函数
提取固定镇(乡)(本例提取马头镇、根思乡)在B2单元格输“=IF(ISNUMBER(FIND('马头镇',A2,1)),'马头镇',IF(ISNUMBER(FIND('根思乡',A2,1)),'根思乡','其他'))”,按ENTER返回上图结果B2单元格公式解读:从A2单元格第1个字符起查找”马头镇”的位置,没有找到对应的位置则显示非数值,故不能返回”马头镇”,则从A2单元格第1个字符起查找”根思乡”的位置,没有找到对应的位置则显示非数值,故不能返回”根思乡”,返回假值-其他当从大量地址中找某一镇,可以通过筛选实现,而当查找多个镇地址时,一个个筛选相对来说较为缓慢,这时可以通过公式获取某些特定镇;(以上针对数据不多的固定镇,若数据较多,可全部提取,再利用VLOOKUP函数做相应匹配)注意:生活中我们遇到的地址可能没有明显的标识镇(乡),所以在查找字符串时,我们可写不含镇的镇名,返回值包含镇;例如以马头镇为例,查找”马头”,返回'马头镇”,这样可能缺失的数据也会被提取出来
粗略提取所有镇(乡)在C2单元格输“=IF(ISNUMBER(FIND('镇',A2,1)),MID(A2,FIND('镇',A2,1)-2,3),IF(ISNUMBER(FIND('乡',A2,1)),MID(A2,FIND('乡',A2,1)-2,3),'其他'))”,按ENTER返回上图结果C2单元格解读:从A2单元格第1个字符起查找字符”镇”的位置,结果返回是镇的位置12,是数值,则IF判断结果返回为真值,结果输出:从A2单元格中的镇的前2位截取,一共截取3位数,最终返回结果为【远襄镇】(1)优点:较为快速提取镇及不含镇的乡(2)缺点:仅能提取含镇或不含镇的乡,且提取内容仅限2个字。若不含镇无法提取或镇不是2个字无法完整提取;例上图中红色字体的瑶湖镇,实际上是A6单元格中的陈瑶湖镇,在真正意义上的提取是不完整的
完整提取所有镇(乡)在D2单元格输“=IF(ISNUMBER(FIND('县',A2,1)+FIND('镇',A2,1)),MID(A2,FIND('县',A2,1)+1,FIND('镇',A2,1)-FIND('县',A2,1)),IF(ISNUMBER(FIND('县',A2,1)+FIND('乡',A2,1)),MID(A2,FIND('县',A2,1)+1,FIND('乡',A2,1)-FIND('县',A2,1)),IF(ISNUMBER(FIND('区',A2,1)+FIND('镇',A2,1)),MID(A2,FIND('区',A2,1)+1,FIND('镇',A2,1)-FIND('区',A2,1)),IF(ISNUMBER(FIND('区',A2,1)+FIND('乡',A2,1)),MID(A2,FIND('区',A2,1)+1,FIND('乡',A2,1)-FIND('区',A2,1)),'其他'))))”,按ENTER返回上图结果D2单元格解读:从A2单元格第1个字符起查找字符”县”和”镇”的位置,分别返回9和12,两者之和为21属于数值,则返回真值,即从A2单元格地址中截取中间的某一段,开始位置是县后面的1位起,截取的长度是镇所在的长度与县所在长度之差,即12-9=3位数,结果输出【远襄镇】公式总体考虑的是我国地址的排列顺序,县(区)、镇(乡)共计4种组合具体为:县-镇;县-乡;区-镇;区-乡; (1)优点:只要提取的镇(乡)均是完整的,例如上图中的陈瑶湖镇是完整提取(2)缺点:仅能提取含镇或不含镇的乡,对于不含”镇”及”乡”或非固定排序的提取不一定能提取出来
注意上图黄色底色标注的”其他”理论意义上是缺失项,回归原始单元格看两个单元格地址归类是【省市市镇(乡)】无法查找县(区),而查找市在第一个市就会返回,处理方式共两种:(1) 针对数目不多的情况可手动更改(2)针对数据较多,我们将查找第一个市变成查找第二个市(从一个市后面第二个市前面中间的任意位置查找,下例是从第7个字符开始查找),即在完整提取所有镇(乡)时D2单元格公式将”其他”更换为”IF(ISNUMBER(FIND('市',A2,7)+FIND('镇',A2,1)),MID(A2,FIND('市',A2,7)+1,FIND('镇',A2,1)-FIND('市',A2,7)),IF(ISNUMBER(FIND('市',A2,7)+FIND('乡',A2,1)),MID(A2,FIND('市',A2,7)+1,FIND('乡',A2,1)-FIND('市',A2,7)),'其他'))”,按ENTER即可提取相邻市的镇(乡)
以上的提取仅根据上述情况设定而变,不同的地址排列可根据具体内容做相应的调整;
上面公式第一眼看比较多,可对公式按F9查询公式的每一步运行内容