例項需求:資料儲存在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分...