如何提取單元格中的數字
前景提要
前幾天我收到了一個小夥伴的反饋,他表示希望能夠針對單元格內容中數字的提取稍微說一下,單元格中內容的提取也是很常見的操作,如果資料量小的話,我們可以用最傳統的方法,手工+肉眼的方式來提取,但是如果碰到資料量大的話,就需要考慮用其他的方法了,這個其他,自然就是指VBA了。一起來看看
場景說明
簡單的構造一下資料,常見的數字提取的場景,無外乎就是上面幾種,數字在開頭,或者結尾,或者中間,或者搭配中文,或者搭配英文,常規的就這樣。
那我們就以這個資料來源為引子,開啟關於單元格內容提取的篇章吧,比方說提取中文,提取英文,電話。。。。
好了,撤的有點遠了。
迴歸正題,我們用VBA將單元格中的數字提取出來
程式碼區
Sub sz()
Dim rng As Range, a As Range
Set rng = Application。InputBox(“請選擇單元格區域”, “提取單元格的數字”, , , , , , 8)
For Each a In rng
MyStr = a。Value
ResultStr = “”
With CreateObject(“VBSCRIPT。REGEXP”)
。Pattern = “\d”
。IgnoreCase = True
。Global = True
If 。test(MyStr) Then
For Each Item In 。Execute(MyStr)
ResultStr = ResultStr & Item
Next Item
a。Offset(0, 1) = ResultStr
End If
End With
Next a
End Sub
說到提取數字,你可能還是一點思路都沒有
因為之前我們的操作都可以用VBA的一些常用方法來實現,但是這個提取數字。。。似乎沒有
不過不著急,其實在之前講解單元格拆分的時候,我們已經用過這個方法了,有沒有印象,他就是正則
先來看看程式碼的效果
整理來說,初步效果已經達到 。
程式碼解析
前面已經說了,今天我們用到的方法,其實就是正則
也許很多小夥伴會非常希望講解下VBA中正則的用法
我已經安排上了,後面會詳細的講解的,因為正則涉及的東西比較多,三言兩語也說不清
這裡大家就先學會這個方法
想要在VBA中使用正則,第一件事就是告訴VBA我要使用正則了,如何告訴呢?
With CreateObject(“VBSCRIPT。REGEXP”)
*****
end with
既然正則都需要寫表示式,那麼我們現在就來看看錶達式怎麼寫
。Pattern = “\d{”
。IgnoreCase = True
。Global = True
這三個就是正則表示式在VBA中的結構了
其中Pattern後面的就是正則表示式
IgnoreCase表示是否忽略大小寫
Global則代表是否全域性匹配
常規下,都是直接按照上面的模式寫,只需要更改下pattern後面的正則表示式即可
這是套路
想要獲得純數字的結果,正則表示式就是“\d”
他就是匹配數字的
利用正則查詢,他肯定會返回一個結果,這個結果我們就直接判斷是否為空,如何判斷
If 。test(MyStr) Then
For Each Item In 。Execute(MyStr)
ResultStr = ResultStr & Item
Next Item
a。Offset(0, 1) = ResultStr
End If
下面這些就是基本套路了。套路這個東西,簡單說,就是拿來用就好。
其中ResultStr就是最終返回的結果
有了結果,直接填入單元格中,這個簡單操作,對大家來說都是so easy 啦。