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.
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)")
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
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)")
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