kiến thức [Excel VBA] Sử dụng biểu thức chính quy (Regular Expression) để trích xuất văn bản

NguyenDang95

Senior Member
Biểu thức chính quy (thường được viết tắt là Regex) là tập hợp những ký tự đại diện khác nhau theo quy tắc nhằm trả về chuỗi nhất định. Regex được nhiều ngôn ngữ lập trình hỗ trợ, là công cụ rất hữu dụng trong xử lý chuỗi.

Trong Google Sheets, chúng ta có thể sử dụng ba hàm như RegexExtract, RegexMatch và RegexReplace để xử lý chuỗi với Regex, tuy nhiên trong Excel lại không có hàm tương tự như thế. Mặc dù vậy, thông qua macro VBA chúng ta có thể viết hàm xử lý chuỗi bằng Regex tương tự như của Google Sheets và sử dụng trong Excel.

Tạo một module mới trong cửa sổ VBE (chọn tab Developer – Visual Basic) và bắt đầu viết hàm.

Code:
Option Explicit

Public Function RegexExtract(Value As Variant, Pattern As String) As String
    Dim objRegex As Object
    Dim objRegexMatch As Object
    Dim colRegexMatches As Object
    Set objRegex = CreateObject("VBScript.Regexp")
    With objRegex
        .Pattern = Pattern
        .Global = True
        .IgnoreCase = False
        .MultiLine = True
    End With
    Set colRegexMatches = objRegex.Execute(Value)
    For Each objRegexMatch In colRegexMatches
        RegexExtract = RegexExtract & " " & objRegexMatch.Value
    Next
    Set objRegex = Nothing
    Set objRegexMatch = Nothing
    Set colRegexMatches = Nothing
End Function

Public Function RegexReplace(Value As Variant, Pattern As String, ReplacementString As String) As String
    Dim objRegex As Object
    Dim Result As String
    Set objRegex = CreateObject("VBScript.Regexp")
    With objRegex
        .Pattern = Pattern
        .Global = True
        .IgnoreCase = False
        .MultiLine = True
    End With
    Result = objRegex.Replace(Value, ReplacementString)
    RegexReplace = Result
    Set objRegex = Nothing
End Function

Public Function RegexMatch(Value As Variant, Pattern As String) As Boolean
    Dim objRegex As Object
    Dim colMatches As Object
    Set objRegex = CreateObject("VBScript.Regexp")
    With objRegex
        .Pattern = Pattern
        .Global = True
        .IgnoreCase = False
        .MultiLine = True
    End With
    Set colMatches = objRegex.Execute(Value)
    If colMatches.Count > 0 Then
        RegexMatch = True
    Else: RegexMatch = False
    End If
    Set objRegex = Nothing
    Set colMatches = Nothing
End Function

Ví dụ: Tìm tất cả những chuỗi có địa chỉ email đuôi yahoo.com và hotmail.com ở ô B2 (chứa 100 địa chỉ email khác nhau)

Công thức: RegexExtract(B2, "(\W|^)[\w.\-]*\@(yahoo.com.vn|hotmail.com)")

1667187997391.png


Tìm hiểu thêm:
Hàm REGEXEXTRACT - Trình chỉnh sửa Tài liệu Trợ giúp (google.com)

https://www.tutorialspoint.com/vbscript/vbscript_reg_expressions.htm

https://www.w3schools.com/jsref/jsref_obj_regexp.asp
 
Back
Top