sponsored links

文科生自學VBA-正則自定義函式小匯

--教育不是灌輸,而是點燃火焰,學習程式設計成就更好的自己--

微軟公司Office軟體在商業辦公領域一直佔據著主流和主導地位,其中Excel在資料處理和分析領域有著強大的影響力,大部分人在經歷幾年職場歷練後可以熟練的使用Excel函式透視表功能,基本可以輕鬆完成絕大多數工作和任務。但實際上Office的強大和獨特之處還在於VBA,因為VBA能夠勝任好多個性化二次開發,減少重複機械勞動從而實現辦公自動化,開發效率高且開發週期短,尤其對於Excel重度使用者來說會了VBA簡直就是如虎添翼啊!!!(本人外語專業畢業,機緣巧合愛上程式設計,自學道路曲曲折折,痛並快樂!)在這裡總結一下自學VBA遇到的難點和重點,分享碼過的程式碼和要點總結,希望能夠給初學者一點啟示和鼓勵,同時願意結交更多大神交流有助提升自己的水平。

在VBA裡可以編寫符合自己需求的自定義函式(例如:個人所得稅計算函式),同時在VBA裡也可以呼叫正則表示式處理文字資料,那麼把這兩者結合起來就能夠製作強大的文字資料清洗工具了,今天簡單列舉一些常見的清洗和提取資料自定義函式,讓大家感受和領略兩者結合後的魅力和威力。

提取功能-抽取單元格內容中出現的第一個數字資料:

文科生自學VBA-正則自定義函式小匯

提取功能-抽取單元格內容中出現的第二個數字資料:

文科生自學VBA-正則自定義函式小匯

提取功能-抽取單元格內容中出現的第三個數字資料:

文科生自學VBA-正則自定義函式小匯

利用這幾個正則自定義函式可以輕鬆得到想要的尺寸資料,可以直接算出體積或面積等資料,簡直不要太方便了吧!!!

提取功能-抽取單元格內容中出現的第一個QQ號碼資料:

可以看到QQ號碼也輕鬆被提取出來,簡單粗暴!!!

文科生自學VBA-正則自定義函式小匯

提取功能-抽取單元格內容中出現的第一個漢字資訊資料:

文科生自學VBA-正則自定義函式小匯

提取功能-抽取單元格內容中出現的第二個漢字資訊資料:

文科生自學VBA-正則自定義函式小匯

提取功能-抽取單元格內容中出現的第一個6位郵編資訊資料:

文科生自學VBA-正則自定義函式小匯

提取功能-抽取單元格內容中出現的第一個英文資訊資料:

文科生自學VBA-正則自定義函式小匯

替換功能-替換單元格內容中數字以外的字元或資料為空:

不僅可直接提取想的資料,也可以替換不想要的資料,是不是很爽!!

文科生自學VBA-正則自定義函式小匯

替換功能-替換單元格內容中漢字以外的字元或資料為空:

文科生自學VBA-正則自定義函式小匯

程式碼彙總如下:

Function PureNumberA(x) '提取出現的第一個純數字資料
Application.ScreenUpdating = False
With CreateObject("VBSCRIPT.REGEXP")
    .Pattern = "\d+"
    .IgnoreCase = True
    .Global = True
    If .Test(x) Then
        PureNumberA = Val(.Execute(x)(0)) '把文字資料轉換為數值資料,0代表第一個出現的值
    Else: PureNumberA = ""
    End If
End With
Application.ScreenUpdating = True
End Function

Function PureNumberB(x) '提取出現的第二個純數字資料
Application.ScreenUpdating = False
With CreateObject("VBSCRIPT.REGEXP")
    .Pattern = "\d+"
    .IgnoreCase = True
    .Global = True
    If .Test(x) Then
        PureNumberB = Val(.Execute(x)(1)) '把文字資料轉換為數值資料,1代表第二個出現的值
    Else: PureNumberB = ""
    End If
End With
Application.ScreenUpdating = True
End Function

Function PureNumberC(x) '提取出現的第三個純數字資料
Application.ScreenUpdating = False
With CreateObject("VBSCRIPT.REGEXP")
    .Pattern = "\d+"
    .IgnoreCase = True
    .Global = True
    If .Test(x) Then
        PureNumberC = Val(.Execute(x)(2)) '把文字資料轉換為數值資料,2代表第三個出現的值
    Else: PureNumberC = ""
    End If
End With
Application.ScreenUpdating = True
End Function

Function QQDTA(x) '提取出現的第一個QQ資料
Application.ScreenUpdating = False
With CreateObject("VBSCRIPT.REGEXP")
    .Pattern = "QQ\d+"
    .IgnoreCase = True
    .Global = True
    If .Test(x) Then
        QQDTA = .Execute(x)(0)
    Else: QQDTA = ""
    End If
End With
Application.ScreenUpdating = True
End Function

Function ChineseA(x) '提取出現的第一個出現的漢字資料
Application.ScreenUpdating = False
With CreateObject("VBSCRIPT.REGEXP")
    .Pattern = "[\u4e00-\u9fa5]+"
    .IgnoreCase = True
    .Global = True
    If .Test(x) Then
         ChineseA = .Execute(x)(0) '把文字資料轉換為數值資料,0代表第一個出現的值
    Else:  ChineseA = ""
    End If
End With
Application.ScreenUpdating = True
End Function

Function ChineseB(x) '提取出現的第二個出現的漢字資料
Application.ScreenUpdating = False
With CreateObject("VBSCRIPT.REGEXP")
    .Pattern = "[\u4e00-\u9fa5]+"
    .IgnoreCase = True
    .Global = True
    If .Test(x) Then
         ChineseB = .Execute(x)(1) '把文字資料轉換為數值資料,1代表第二個出現的值
    Else:  ChineseB = ""
    End If
End With
Application.ScreenUpdating = True
End Function

Function PostNumberA(x) '提取出現的第一個6位郵編資料
Application.ScreenUpdating = False
With CreateObject("VBSCRIPT.REGEXP")
    .Pattern = "\d{6}"
    .IgnoreCase = True
    .Global = True
    If .Test(x) Then
        PostNumberA = Val(.Execute(x)(0)) '把文字資料轉換為數值資料,0代表第一個出現的值
    Else: PostNumberA = ""
    End If
End With
Application.ScreenUpdating = True
End Function

Function EnglishDTA(x) '提取出現的第一個英文資料
Application.ScreenUpdating = False
With CreateObject("VBSCRIPT.REGEXP")
    .Pattern = "[a-zA-Z]+"
    .IgnoreCase = True
    .Global = True
    If .Test(x) Then
        EnglishDTA = .Execute(x)(0)
    Else: EnglishDTA = ""
    End If
End With
Application.ScreenUpdating = True
End Function

Function OnlyNumber(x) '替換數字以外的字元為空
Application.ScreenUpdating = False
Set regex = CreateObject("VBSCRIPT.REGEXP")
    regex.Pattern = "[^\d+]"
    regex.IgnoreCase = True
    regex.Global = True
OnlyNumber = regex.Replace(x, "")
Set regexex = Nothing
Application.ScreenUpdating = True
End Function

Function OnlyChinese(x) '替換漢字以外的字元為空
Application.ScreenUpdating = False
Set regex = CreateObject("VBSCRIPT.REGEXP")
    regex.Pattern = "[^\u4e00-\u9fa5]"
    regex.IgnoreCase = True
    regex.Global = True
OnlyChinese = regex.Replace(x, "")
Set regexex = Nothing
Application.ScreenUpdating = True
End Function

看到這是不是已經感受到正則和自定義函式結合的好處和威力?還不趕緊動手也試一試哇,如果想要做得更好就沉下心來學習一下正則表示式吧。

END

我為人人,人人為我!!歡迎大家關注,點贊和轉發!!!

~~人生不是賽場,夢想不容退場~~不斷努力學習蛻變出一個更好的自己,不斷分享學習路上的收穫和感悟幫助他人成就自己!!!

分類: 科技
時間: 2021-09-17

相關文章

優勢大盤點!安卓對比iOS,到底好在了哪?

優勢大盤點!安卓對比iOS,到底好在了哪?
大家都知道,iOS一直是手機系統的行業標杆,在各個方面都做到了最極致,可是在這樣的情況下,為什麼安卓使用者依舊遠超iOS呢? 據不完全統計,國內手機的安卓和iOS系統中,分別有著約80%和20%的佔有 ...

戀上這座山之四:一池秀水入眸中

戀上這座山之四:一池秀水入眸中
從瑞安市陳岙翻越大羅山下來,幽幽古道,匝匝高樹,青青修竹,疊疊奇巖.下邊天河水庫平靜得好似綠色大理石桌面,掩映在青山綠野間,迴清倒影,一池明淨秀水入眸而來. 庫邊的一個叫西垟頭的古村,零星的座落著幾間 ...

小鵬匯天目標打造可摺疊飛行汽車,創始人手握24件專利申請

小鵬匯天目標打造可摺疊飛行汽車,創始人手握24件專利申請
近日,小鵬汽車董事長兼CEO何小鵬表示,期待小鵬匯天第六代產品可以成為一輛能飛能開的可摺疊飛行汽車.據悉,小鵬匯天在過去8年時間中,曾推出5代產品,累計試飛1.5萬次. 公開資料顯示,小鵬匯天是由小鵬 ...

騰訊上線適老化小程式,老人可以在家自學智慧手機

騰訊上線適老化小程式,老人可以在家自學智慧手機
10月13日,出現了兩則相關又相悖的新聞. 第一個新聞: 工信部:適老版App不得再設有廣告外掛 據"工信微報"微信公眾號訊息,工信部高度重視不良廣告外掛及誘導類按鍵.違法違規網站 ...

下腰痛是怎麼造成的?生命匯國際整合醫療分享緩解腰疼小妙招
下背痛,一種80%的人都有過的疼痛,疼起來的時候都愛扶著腰,所以不僅僅是在外人看來,很多患者自己都覺得可能是腰出了問題,都說下背連著腰,那下背痛就是腰痛嗎?生命匯國際整合醫療提醒您要分清楚這兩者,我們 ...

Unifi全家桶YYDS:打造極度舒適的150平小平層家庭UNIFI網路

Unifi全家桶YYDS:打造極度舒適的150平小平層家庭UNIFI網路
創作立場宣告:開篇先申明一下,這篇文章僅僅自己折騰完以後分享一下自己折騰的結果,不教你怎麼家庭組網,你不要和我學,也請你們不要教我該怎麼做.我常和人說我家的網路就是個笑話,畢竟個人家庭使用那麼點需求, ...

林彪性情冷僻,朋友圈很小,敢管林彪家事的人,唯有劉亞樓

林彪性情冷僻,朋友圈很小,敢管林彪家事的人,唯有劉亞樓
作者:桅杆 林彪的性格有些孤僻.清高.自負,不大懂人情世故,甚至有些不近人情,但在戰爭年代的威望卻非常高,無論是紅軍時期.抗日戰爭時期還是解放戰爭時期都如此.林彪與領導.同事或下屬之間,基本上都是工作 ...

殺入合生匯,口罩當潮牌賣,90後女孩年入3000萬|後窗

殺入合生匯,口罩當潮牌賣,90後女孩年入3000萬|後窗
大家好,這裡是投中網「後窗」欄目的第八期.這是一檔關於職場+人的欄目,在這裡,我們照見職人另一面.透過個體化的故事,去觀察人的處境與產業前沿的變化. 兩個90後女孩,用一年8個月的時間,究竟能夠撬動多 ...

語文學習方法之自學,看一線語文教師手寫知識點來預習

語文學習方法之自學,看一線語文教師手寫知識點來預習
那些小學霸們的自學能力是非常強的.他們花在學習上的時間可能並不多,但是他們學習的效率卻很強大,作為家長,我們也要培養自己的孩子有比較高的學習效率,培養孩子有自學的能力. 作為一名小學二年級的學生,如何 ...

獨家 | 陸正耀“趣小面”估值10億,尋求1億融資,大規模擴張暫緩

獨家 | 陸正耀“趣小面”估值10億,尋求1億融資,大規模擴張暫緩
Tech星球獨家獲悉,陸正耀旗下餐飲品牌趣小面正在尋求一輪融資.據訊息人士透露,本輪融資趣小面估值10億元,預計融資1億元. 今年4月,趣小面開始籌備,這是陸正耀繼瑞幸咖啡之後又一個新的創業專案.當時 ...

爆紅2年,那個一人帶火一座城的不倒翁小姐姐,卻因全運會被罵上了熱搜...

爆紅2年,那個一人帶火一座城的不倒翁小姐姐,卻因全運會被罵上了熱搜...
來源:王耳朵先生 5天前,西安市區. 從西安國際會展中心到奧體中心長達10公里的道路上,處處擠滿了人. 那是第14屆全國運動會聖火傳遞的最後一站. 99位火炬手,傳遞著這場盛會的火把. 但當其中一位女 ...

小鵬飛行汽車2024年交付?五菱打造國產晶片、高合銷量超越賓士

小鵬飛行汽車2024年交付?五菱打造國產晶片、高合銷量超越賓士
駕駕駕~發車啦,小道哥一週一次的嗑瓜子時間又來啦! 新的一週,新的見聞.這周,是車企奮勇向前的一週,更是致力未來的一週.小鵬飛行汽車交付時間確定啦:為了解決未來晶片卡脖子問題,五菱開始加快晶片國產化步 ...

匯川物聯加入中國電信5G產業創新聯盟大家庭

匯川物聯加入中國電信5G產業創新聯盟大家庭
隨著我國邁入5G時代 5G技術將從方方面面改變我們的生活,萬物互聯是5G的一個發展趨勢,它使我們的生活更加方便快捷.2019年9月成立的中國電信5G產業創新聯盟是一個旨在聚合產業夥伴.探索5G創新應用 ...

實用又好玩!盤點鮮為人知的微信官方小工具

實用又好玩!盤點鮮為人知的微信官方小工具
騰訊官方續推出了好幾個實用的微信小程式(騰訊待辦.騰訊電子籤.騰訊文件收集助手),真是又實用又好用,有了它們的幫助,我們就可事半功倍的完成任務,一起來看看吧. 微信通知 快速分享 騰訊待辦 不知道你的 ...

從廣匯·臻園現場發來一條專案新訊息,請檢視

從廣匯·臻園現場發來一條專案新訊息,請檢視
想買新房,平時上班沒時間去看房,不能全面瞭解樓盤的資訊,怎麼辦?小編今天給您分享一條純乾貨,置業顧問從廣匯·臻園售樓處現場發來的新訊息,請檢視! 匯臻城臻園87平兩室戶型你也可以裝修成這樣的原木極簡風 ...

老破小,請放開買

老破小,請放開買
關於"老破小",是每個北京買房人繞都繞不過去的坎,你首套上車預算有限,想職住平衡,就只能選老破小:你剛需改善二室換三房,限購限貸壓上全部身家也只能用自己的次新兩居換老破小三居:孩子 ...

隨遇而安的小蘑菇

隨遇而安的小蘑菇
隨遇而安的小蘑菇 文/ 充滿理想 神奇的小物種 這朵神奇的小物種,得天地之精華,匯人間之靈氣,欣然安家於A棟多功能廳外面走道的牆上. --這是我初見這朵蘑菇時的印象. 同事倒是非常驚訝:"咦 ...

服務區匝道不長,資訊量不小,每一項都關乎合規和安全

服務區匝道不長,資訊量不小,每一項都關乎合規和安全
經過短暫的休息以後,現在開車準備駛離服務區,即將重新開上高速公路.前方就是匝道口了,多數服務區匝道都是單車道,現在看到的卻是兩個車道,左側有地標線的是行車道,右側空蕩蕩的應急車道. 問題是兩條車道的起 ...

宇通&匯誠鑫達定製版 細節控看過來 智慧系統 安全暢行

宇通&匯誠鑫達定製版 細節控看過來 智慧系統 安全暢行
宇通&匯誠鑫達定製版外觀配色上依然延續了宇通房車的家族風格,白色車體上裝飾有紅灰色的拉花,簡約大氣. 整車尺寸為5990*2430*3199/3299(mm),整備質量為3950kg,最大總質 ...