週末的時候,有位朋友提問了一個這樣的需求,如下圖:
單元格中有一長串內容,需要從中提取變更前和變更後權利人的省份信息,也就是圖中標紅的信息。
爲了簡化說明,永恆君把上面的問題修改成下圖:
思路方案
如果能有兩個函數sf()、sfe(),直接調用sf(D6)、sfe(D6),就可以得出變更前、變更後的省份信息,然後再向下拖動,這樣是不是就比較方便了?
那這兩個函數用什麼思路來提取呢?
永恆君覺得,正則表達式可能會比較方便。永恆君把整個提取的過程寫成了一個自定義函數,如下
這個是sf()函數
Function sf(i As String) As String
Dim a As Object
Set a = CreateObject("VBSCRIPT.REGEXP")
a.Pattern = " (\S)+省|(\S)+自治區|上海市|北京市|天津市|重慶市"
a.Global = True
sf = a.Execute(i)(0)
Set a = Nothing
End Function
其中a.Pattern = " (\S)+省|(\S)+自治區|上海市|北京市|天津市|重慶市"
則是我們需要的正則表達式。
這個是sfe()函數
Function sfe(i As String) As String
Dim a As Object
Set a = CreateObject("VBSCRIPT.REGEXP")
a.Pattern = " (\S)+省|(\S)+自治區|上海市|北京市|天津市|重慶市"
a.Global = True
sfe = a.Execute(i)(1)
Set a = Nothing
End Function
寫好之後,展示一下效果:
這樣就可以快速的將裏面的省份信息提取出來了。
如果你要提取其他格式的內容,也可以修改a.Pattern後面的內容,一樣可以得到想要的結果。
相關閱讀:
Excel vba 實例(8)- 利用正則表達式進行定向提取
歡迎交流!