前面三篇經驗主要介紹了“LEFT”、“RIGHT”、“MID” 截取字符串函數的簡單應用實例,這三個函數如果能夠巧妙結合其它函數,它能夠實現的效果肯定會讓你驚訝不已。
分離單元格內容將分為2個實例來介紹,本次經驗介紹如何分離出地址中的省、市、縣、詳細地址,需要用到的函數有“MID”、“FIND”、“IFERROR”、“LEN”以及連接符“&”。選用較為典型的地址作為例子。
工具/原料
Microsoft office EXCEL 2003 以上的版本 或 WPS
《地址表》
一、單元格內容拆分分析
拆分地址需要考慮以下問題:
① 省名、市名、縣名及詳細地址的長度不一。
② 地址中可能不存在縣的情況。
③ 省可能為直轄市、自治區,如果是市區可能無縣。
不但要計算出省名長度、市名長度、縣名長度,還需要把各種特殊情況一起考慮進來。才能成功分離的地址信息。
雖然地址有一定的不規則性,但是我們不難發現,省/自治區、市、縣/區會包含關鍵字“省”、“自治區”、“市”、“縣”、“區”作劃分,好比裁剪線一樣。可以依次來計算出相應省/自治區、市、縣/區的長度。
一些特殊的情況,採用判斷是否計算錯誤來改變計算方式。如在查找關鍵字“省”時出現找不到的錯誤,就認為這個地址是直轄市,其它也用相同的辦法處理。如果你的數據信息不全,會造成判斷錯誤。
二、單元格內容拆分
先介紹需要用到的兩個新的函數
FIND(find_text,within_text,rt_n[start_num])函數用查詢字符串在某個字符串的位置,如“省”字在某個地址中是第幾個字的意思。它包含三個參數,“find_text”為需要查找的值,“within_text”為要被查找的文本,可選參數“start_num”為開始查找的位置,這個位置並不是開始計數的位置,“within_text”的第一個字符才是開始計數的位置。
IFERROR(value,value_if_error)函數用於判斷運算式是否正確,當為錯誤時,傳回“value_if_error”的值,正確則為“value”。這裡我們用於判斷是否能夠找到關鍵字,來應付地址的特殊性。
在地址中提取國籍是最簡單的,沒有特殊情況。這裡我還是使用“FIND”函數來提取,以便熟悉這一函數的用法。使用“MID”截取字符串函數(也可以用LEFT),從第一位開始,一共截取FIND("國",B2,1)位字符。
其中FIND("國",B2,1)會自動計算出從B2單元格的左邊第一個字符開始到(第一個)關鍵字“國”的字符數,計算結果是 2.所以共截取兩個字符。
向下填充即可得到需要的結果。
提取省/自治區/直轄市時,需要讓計算機去判斷是否為直轄市或自治區。不要看到下面一大串內容就覺得複雜,在EXCEL中可以看出,每一個函數的括號都不一樣,這有利於我們確定函數到哪裡結束。這裡說明第一步如何分解,下一步類似。
完整的函數如下:
=IFERROR(MID(B2,FIND("國",B2,1)+1,IFERROR(FIND("省",B2,1),FIND("自治區",B2,1)+2)-FIND("國",B2,1)),
MID(B2,FIND("國",B2,1)+1,FIND("市",B2,1)-FIND("國",B2,1)))
提取市,完整函數如下:
=MID(B2,LEN(C2&D2)+1,FIND("市",B2,1)-LEN(C2&D2))
提取市也較為簡單,找出市的位置,然後減去前面省的結果即可。
同樣的方法提取縣/區
=IFERROR(MID(B2,FIND("市",B2,1)+1,IFERROR(FIND("區",B2,FIND("市",B2,1))-FIND("市",B2,1),FIND("縣",B2,FIND("市",B2,1))-FIND("市",B2,1))),"")
最後提取詳細地址,就用減法。最後得到下面的結果。
注意事項
地址的部分特殊情況(如縣級市等)可能還未考慮,需要再加判斷處理,原理都相同。