VBA之正規表示式(4) 提取日期和金額

2021-09-12 07:11:12 字數 1845 閱讀 7028

例項需求:資料儲存在a列中,需要將其中的日期和金額分別提取至b列和c列。其中日期也兩種不同格式,金額可能包含小數點、千分符和貨幣標識。

objregex.pattern = "(\d-\d-\d|\d\.\d\.\d).*?(([a-z])*\d+[\d.,]*元)"

objregex.global = true

for i = 2 to cells(rows.count, "a").end(xlup).row

form = cells(i, "a")

set objmh = objregex.execute(form)

if objmh.count > 0 then

cells(i, 2) = cstr(objmh(0).submatches(0))

cells(i, 3) = cstr(objmh(0).submatches(1))

end if

next

set objregex = nothing

set objmh = nothing

end sub

【**解析】

第6行**使用後期繫結建立正則物件。

第7行**指定正則匹配字串,

匹配模式

含義(\d-\d-\d|\d.\d.\d)

用於匹配兩種日期格式,豎線代表「或者」,最外側的圓括號代表提取匹配的字元組

.*?匹配日期和金額之間的字元

(([a-z])*\d+[\d.,]*元)

匹配金額部分,圓括號含義與上面相同

([a-z])*

匹配三個字母的貨幣簡稱,也可以沒有

\d+[\d.,]*元

乙個或者多個數字、小數點、千分位

如果直接使用[\d.,]+匹配金額中的數字,則會匹配到單個小數點或者逗號,例如資料為:舊的一年結束,元旦將要來臨,此模式可以將匹配到,元。由此可見組織乙個嚴謹的正規表示式需要考慮很多情況。

另外需要注意日期的匹配,粗略看,兩種日期格式只是分隔符不同,可以合併簡化正規表示式(\d[-\.]\d[-\.]\d),但是這樣將會匹配到2019-12.25這樣的非標準日期格式。

第8行**設定為全域性搜尋模式。

第9行**第16行**迴圈處理工作表中的資料。

第11行**執行正則匹配,返回結果為matchcollection集合物件。

第13行和第14行**分別將日期和金額寫入工作表中。

vba之正規表示式(2)-- 批量修改公式

vba之正規表示式(3)-- 特殊公式計算

vba之正規表示式(4)-- 提取日期和金額

vba之正規表示式(5)-- 中文字元

vba之正規表示式(6)-- 設定音標格式

vba之正規表示式(7)-- 乾坤大挪移(資料整理)

vba之正規表示式(8)-- 重複字元分組

vba之正規表示式(9)-- 新增千分位(1/3)

vba之正規表示式(10)-- 新增千分位(2/3)

vba之正規表示式(11)-- 新增千分位(3/3)

VBA 正規表示式

正規表示式的概述 正規表示式原本是形式語言理論中的概念,與編譯器的構造有密切的聯絡。但是作為乙個應用軟體的使用者,我們沒有必要去細究正規表示式的嚴格定義和處理方法。本文將從實用的角度出發,闡述引入正規表示式的目的 正規表示式的命令格式,以及如何利用正規表示式完成一些實際的文字處理工作。我們在處理文字...

VBA 正規表示式

1.寫好正規表示式,在資料擷取處理中是十分有優勢的,以下舉幾個例子來學習一下正規表示式的用法 option explicit public function getnum2 str as string with createobject vbscript.regexp global false 全域...

正規表示式 日期

1 日期範圍 datetime 值型別表示值範圍在公元 紀元 0001 年 1 月 1 日午夜 12 00 00 到公元 c.e.9999 年 12 月 31 日晚上 11 59 59 之間的日期和時間。2 閏年 關於公曆閏年是這樣規定的 地球繞太陽公轉一周叫做一回歸年,一回歸年長365日5時48分...