首頁 > 易卦

Excel VBA 8.21 提取單元格中的數字 從來都不難

作者:由 楊sir說科學 發表于 易卦日期:2022-08-19

如何提取單元格中的數字

前景提要

前幾天我收到了一個小夥伴的反饋,他表示希望能夠針對單元格內容中數字的提取稍微說一下,單元格中內容的提取也是很常見的操作,如果資料量小的話,我們可以用最傳統的方法,手工+肉眼的方式來提取,但是如果碰到資料量大的話,就需要考慮用其他的方法了,這個其他,自然就是指VBA了。一起來看看

場景說明

Excel VBA 8.21 提取單元格中的數字 從來都不難

簡單的構造一下資料,常見的數字提取的場景,無外乎就是上面幾種,數字在開頭,或者結尾,或者中間,或者搭配中文,或者搭配英文,常規的就這樣。

那我們就以這個資料來源為引子,開啟關於單元格內容提取的篇章吧,比方說提取中文,提取英文,電話。。。。

好了,撤的有點遠了。

迴歸正題,我們用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的一些常用方法來實現,但是這個提取數字。。。似乎沒有

不過不著急,其實在之前講解單元格拆分的時候,我們已經用過這個方法了,有沒有印象,他就是正則

先來看看程式碼的效果

Excel VBA 8.21 提取單元格中的數字 從來都不難

整理來說,初步效果已經達到 。

程式碼解析

前面已經說了,今天我們用到的方法,其實就是正則

也許很多小夥伴會非常希望講解下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就是最終返回的結果

Excel VBA 8.21 提取單元格中的數字 從來都不難

有了結果,直接填入單元格中,這個簡單操作,對大家來說都是so easy 啦。