Public Function MatchPatternUsingRegex(input_range As Range, pattern As String, Optional match_case As Boolean = True) As Variant Dim arRes() As Variant Dim iInputCurRow As Long, iInputCurCol As Long Dim cntInputRows As Long, cntInputCols As Long Dim regex As Object On Error GoTo ErrHandl MatchPatternUsingRegex = arRes Set regex = CreateObject("VBScript.RegExp") regex.pattern = pattern regex.Global = True regex.MultiLine = True regex.IgnoreCase = Not match_case cntInputRows = input_range.Rows.Count cntInputCols = input_range.Columns.Count ReDim arRes(1 To cntInputRows, 1 To cntInputCols) For iInputCurRow = 1 To cntInputRows For iInputCurCol = 1 To cntInputCols arRes(iInputCurRow, iInputCurCol) = regex.Test(input_range.Cells(iInputCurRow, iInputCurCol).Value) Next iInputCurCol Next iInputCurRow MatchPatternUsingRegex = arRes Exit Function ErrHandl: MatchPatternUsingRegex = CVErr(xlErrValue) End Function Public Function ReplaceUsingRegex(text As String, pattern As String, replacement As String, Optional instance_num As Integer = 0, Optional match_case As Boolean = True) As String Dim regex As Object Dim matches As Object Dim matches_index As Integer Dim pos_start As Integer On Error GoTo ErrHandl Set regex = CreateObject("VBScript.RegExp") regex.pattern = pattern regex.Global = True regex.MultiLine = True regex.IgnoreCase = Not match_case Set matches = regex.Execute(text) If matches.Count > 0 Then If instance_num = 0 Then ReplaceUsingRegex = regex.Replace(text, replacement) ElseIf instance_num <= matches.Count Then pos_start = 1 For matches_index = 0 To instance_num - 2 pos_start = InStr(pos_start, text, matches.Item(matches_index), vbBinaryCompare) + Len(matches.Item(matches_index)) Next matches_index ReplaceUsingRegex = Left(text, pos_start - 1) & Replace(text, matches.Item(instance_num - 1), replacement, pos_start, 1, vbBinaryCompare) End If Else ReplaceUsingRegex = text End If Exit Function ErrHandl: ReplaceUsingRegex = CVErr(xlErrValue) End Function Public Function ExtractUsingRegex(text As String, pattern As String, Optional instance_num As Integer = 0, Optional match_case As Boolean = True) As Variant Dim regex As Object Dim matches As Object Dim matches_index As Integer Dim text_matches() As Variant On Error GoTo ErrHandl Set regex = CreateObject("VBScript.RegExp") regex.pattern = pattern regex.Global = True regex.MultiLine = True regex.IgnoreCase = Not match_case Set matches = regex.Execute(text) If matches.Count > 0 Then If instance_num = 0 Then ReDim text_matches(matches.Count - 1, 0) For matches_index = 0 To matches.Count - 1 text_matches(matches_index, 0) = matches.Item(matches_index) Next matches_index ExtractUsingRegex = text_matches ElseIf instance_num <= matches.Count Then ExtractUsingRegex = matches.Item(instance_num - 1) End If End If Exit Function ErrHandl: ExtractUsingRegex = CVErr(xlErrValue) End Function