Excel VBA 自定義函數 使用正則表達式提取子字符串(不是詳細教程)


新建一個Excel工作表

然后打開Excel自帶的VBA開發環境

導入一個庫

選擇 工具 > 引用

導入下面選中的庫,第一次導入需要使勁往下翻,界面特別蛋疼

 GIF

 

然后粘貼下面的代碼

 

Public Function RegexSubString(text As String, pattern As String, Optional matcheIndex As Integer = 0, Optional subMatcheIndex As Integer = -1, Optional ignoreCase As Boolean = False, Optional multiLine As Boolean = True, Optional defaultText As String = "") As String

' text 參數 待匹配的文本
' pattern 參數 正則表達式或者說模式文本
' matcheIndex 參數(可選) 第幾個匹配項的索引,0是開頭第一個,-1是末尾第一個依次類推
' subMatcheIndex 參數(可選) 匹配項中子匹配項的索引,從0開始,默認值是-1代表返回完整匹配項
' ignoreCase 參數(可選) 如果為 True,則匹配忽略字母大小寫
' multiLine 參數(可選) 如果為 True,則模式匹配發生在換行符之間
' defaultText 參數(可選) 假如沒有匹配項則返回的默認文本,假如有匹配項但是子匹配項索引錯誤也會返回此值

Dim RegEx As New RegExp

With RegEx

.Global = True 'True,則找到字符串中模式的所有匹配項。如果為 False,則僅找到第一個匹配項

.ignoreCase = ignoreCase

.multiLine = multiLine

.pattern = pattern

End With

Dim ms As MatchCollection, m As Match, gs As SubMatches


Set ms = RegEx.Execute(text)

If ms.Count = 0 Then
    RegexSubString = defaultText
    Exit Function
End If




Dim index As Integer

If matcheIndex >= 0 Then
    index = matcheIndex
Else
    index = ms.Count + matcheIndex
End If
    

If index >= 0 And index < ms.Count Then
    Set m = ms.Item(index)
Else
    RegexSubString = defaultText
    Exit Function
End If


Set gs = m.SubMatches

If subMatcheIndex = -1 Then
    RegexSubString = m.Value
    Exit Function
ElseIf subMatcheIndex >= 0 And subMatcheIndex < gs.Count Then
    RegexSubString = gs.Item(subMatcheIndex)
Else
    RegexSubString = defaultText
    Exit Function
End If


End Function

 

 

 

GIF

 

 關閉VBA開發環境,但不關閉工作表,然后把這個工作表另存為加載宏,因為excel有些歷史記錄關不掉,所以GIF錄得區域過小,但是應該能看懂

 

 

 

然后關閉該工作表,打開其他工作表,然后才去點擊Excel加載項,加載項的名字就是你另存為時輸入的名字

 

 

 簡單使用示例

 

 

 

 

 

 

 

后面附一個使用正則表達式替換文本的VBA腳本

Public Function RegexReplace(text As String, pattern As String, replaceText As String, Optional replaceAll As Boolean = False, Optional ignoreCase As Boolean = False, Optional multiLine As Boolean = True) As String

' text 參數 待匹配的文本
' pattern 參數 正則表達式或者說模式文本
' replaceText 參數 用來替換的文本,可以使用 $1 來引用第一個子匹配項,依次類推
' replaceAll 參數(可選) 是否替換所有匹配項
' ignoreCase 參數(可選) 如果為 True,則匹配忽略字母大小寫
' multiLine 參數(可選) 如果為 True,則模式匹配發生在換行符之間

Dim RegEx As New RegExp

With RegEx

.Global = replaceAll 'True,則找到字符串中模式的所有匹配項。如果為 False,則僅找到第一個匹配項

.ignoreCase = ignoreCase

.multiLine = multiLine

.pattern = pattern

End With

RegexReplace = RegEx.Replace(text, replaceText)

End Function

 

簡單使用示例

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM