Cách sử dụng Biểu thức chính quy (Regex) trong Microsoft Excel cả trong ô và vòng lặp

621
Portland Runner 2014-03-21 09:09.

Làm cách nào để sử dụng biểu thức chính quy trong Excel và tận dụng thiết lập dạng lưới mạnh mẽ của Excel để thao tác dữ liệu?

  • Hàm trong ô để trả về một mẫu phù hợp hoặc giá trị được thay thế trong một chuỗi.
  • Sub để lặp qua một cột dữ liệu và trích xuất các kết quả phù hợp với các ô liền kề.
  • Thiết lập nào là cần thiết?
  • Các ký tự đặc biệt của Excel cho Biểu thức chính quy là gì?

Tôi hiểu Regex là không lý tưởng cho nhiều tình huống ( Để sử dụng hoặc không sử dụng biểu thức thông thường? ) Kể từ excel có thể sử dụng Left, Mid, Right, Instrloại lệnh cho các thao tác tương tự.

9 answers

992
Portland Runner 2014-03-21 09:09.

Biểu thức chính quy được sử dụng để So khớp mẫu.

Để sử dụng trong Excel, hãy làm theo các bước sau:

Bước 1 : Thêm tham chiếu VBA vào "Microsoft VBScript Regular Expressions 5.5"

  • Chọn tab "Nhà phát triển" ( Tôi không có tab này, tôi phải làm gì? )
  • Chọn biểu tượng "Visual Basic" từ phần ruy-băng 'Mã'
  • Trong cửa sổ "Microsoft Visual Basic for Applications", chọn "Công cụ" từ menu trên cùng.
  • Chọn "Tham khảo"
  • Chọn hộp bên cạnh "Microsoft VBScript Regular Expressions 5.5" để đưa vào sổ làm việc của bạn.
  • Nhấp vào "OK"

Bước 2 : Xác định mẫu của bạn

Định nghĩa cơ bản:

- Phạm vi.

  • Ví dụ: a-zkhớp các chữ cái thường từ a đến z
  • Ví dụ: 0-5khớp với bất kỳ số nào từ 0 đến 5

[] Khớp chính xác một trong các đối tượng bên trong các dấu ngoặc này.

  • Ví dụ: [a]khớp với chữ a
  • Ví dụ: [abc]khớp với một chữ cái duy nhất có thể là a, b hoặc c
  • Ví dụ: [a-z]khớp với bất kỳ chữ cái thường nào trong bảng chữ cái.

()Nhóm các trận đấu khác nhau cho mục đích trả lại. Xem ví dụ bên dưới.

{} Hệ số nhân cho các bản sao lặp lại của mẫu được xác định trước nó.

  • Ví dụ: [a]{2}khớp với hai chữ cái viết thường liên tiếp a:aa
  • Ví dụ [a]{1,3}phù hợp với ít nhất một và tối đa ba thấp hơn thư trường hợp a, aa,aaa

+ Khớp ít nhất một hoặc nhiều mẫu được xác định trước nó.

  • Ví dụ như a+sẽ phù hợp liên tiếp của một a, aa, aaa, và vân vân

? Khớp số không hoặc một trong các mẫu được xác định trước nó.

  • Ví dụ: Mẫu có thể có hoặc không nhưng chỉ có thể được khớp một lần.
  • Ví dụ: [a-z]?khớp với chuỗi rỗng hoặc bất kỳ chữ cái thường nào.

* Khớp không hoặc nhiều mẫu được xác định trước nó. - Ví dụ: Ký tự đại diện cho mẫu có thể có hoặc không. - Ví dụ: [a-z]*khớp với chuỗi rỗng hoặc chuỗi các chữ cái thường.

. Khớp với bất kỳ ký tự nào ngoại trừ dòng mới \n

  • Ví dụ: a.Khớp một chuỗi hai ký tự bắt đầu bằng a và kết thúc bằng bất kỳ thứ gì ngoại trừ\n

| Toán tử HOẶC

  • Ví dụ: a|bcó nghĩa là ahoặc hoặc bcó thể được kết hợp.
  • Ví dụ: red|white|orangekết hợp chính xác một trong các màu.

^ KHÔNG phải nhà điều hành

  • Ví dụ: [^0-9]ký tự không thể chứa một số
  • Ví dụ: [^aA]ký tự không được viết thường ahoặc viết hoaA

\ Thoát khỏi ký tự đặc biệt theo sau (ghi đè hành vi trên)

  • Ví dụ như \., \\, \(, \?, \$,\^

Các mẫu neo:

^ So khớp phải xảy ra ở đầu chuỗi

  • Vd: ^aKý tự đầu tiên phải là chữ thườnga
  • Vd: ^[0-9]Ký tự đầu tiên phải là một số.

$ So khớp phải xảy ra ở cuối chuỗi

  • Vd: a$Ký tự cuối cùng phải là chữ thườnga

Bảng ưu tiên:

Order  Name                Representation
1      Parentheses         ( )
2      Multipliers         ? + * {m,n} {m, n}?
3      Sequence & Anchors  abc ^ $
4      Alternation         |

Các từ viết tắt ký tự được xác định trước:

abr    same as       meaning
\d     [0-9]         Any single digit
\D     [^0-9]        Any single character that's not a digit
\w     [a-zA-Z0-9_]  Any word character
\W     [^a-zA-Z0-9_] Any non-word character
\s     [ \r\t\n\f]   Any space character
\S     [^ \r\t\n\f]  Any non-space character
\n     [\n]          New line

Ví dụ 1 : Chạy dưới dạng macro

Macro ví dụ sau đây xem xét giá trị trong ô A1để xem 1 hoặc 2 ký tự đầu tiên có phải là chữ số hay không. Nếu vậy, chúng sẽ bị loại bỏ và phần còn lại của chuỗi được hiển thị. Nếu không, thì một hộp xuất hiện cho bạn biết rằng không tìm thấy kết quả phù hợp nào. A1Giá trị ô của 12abcsẽ trả về abc, giá trị của 1abcsẽ trả về abc, giá trị của abc123sẽ trả về "Không phù hợp" vì các chữ số không ở đầu chuỗi.

Private Sub simpleRegex()
    Dim strPattern As String: strPattern = "^[0-9]{1,2}"
    Dim strReplace As String: strReplace = ""
    Dim regEx As New RegExp
    Dim strInput As String
    Dim Myrange As Range

    Set Myrange = ActiveSheet.Range("A1")

    If strPattern <> "" Then
        strInput = Myrange.Value

        With regEx
            .Global = True
            .MultiLine = True
            .IgnoreCase = False
            .Pattern = strPattern
        End With

        If regEx.Test(strInput) Then
            MsgBox (regEx.Replace(strInput, strReplace))
        Else
            MsgBox ("Not matched")
        End If
    End If
End Sub

Ví dụ 2 : Chạy dưới dạng một hàm trong ô

Ví dụ này giống như ví dụ 1 nhưng được thiết lập để chạy dưới dạng một hàm trong ô. Để sử dụng, hãy thay đổi mã thành sau:

Function simpleCellRegex(Myrange As Range) As String
    Dim regEx As New RegExp
    Dim strPattern As String
    Dim strInput As String
    Dim strReplace As String
    Dim strOutput As String


    strPattern = "^[0-9]{1,3}"

    If strPattern <> "" Then
        strInput = Myrange.Value
        strReplace = ""

        With regEx
            .Global = True
            .MultiLine = True
            .IgnoreCase = False
            .Pattern = strPattern
        End With

        If regEx.test(strInput) Then
            simpleCellRegex = regEx.Replace(strInput, strReplace)
        Else
            simpleCellRegex = "Not matched"
        End If
    End If
End Function

Đặt các chuỗi của bạn ("12abc") vào ô A1. Nhập công thức này =simpleCellRegex(A1)vào ô B1và kết quả sẽ là "abc".


Ví dụ 3 : Loop Through Range

Ví dụ này giống như ví dụ 1 nhưng lặp lại qua một dải ô.

Private Sub simpleRegex()
    Dim strPattern As String: strPattern = "^[0-9]{1,2}"
    Dim strReplace As String: strReplace = ""
    Dim regEx As New RegExp
    Dim strInput As String
    Dim Myrange As Range

    Set Myrange = ActiveSheet.Range("A1:A5")

    For Each cell In Myrange
        If strPattern <> "" Then
            strInput = cell.Value

            With regEx
                .Global = True
                .MultiLine = True
                .IgnoreCase = False
                .Pattern = strPattern
            End With

            If regEx.Test(strInput) Then
                MsgBox (regEx.Replace(strInput, strReplace))
            Else
                MsgBox ("Not matched")
            End If
        End If
    Next
End Sub

Ví dụ 4 : Tách rời các mẫu khác nhau

Ví dụ này lặp qua một phạm vi ( A1, A2& A3) và tìm kiếm một chuỗi bắt đầu bằng ba chữ số theo sau là một ký tự alpha và sau đó là 4 chữ số. Đầu ra tách mẫu phù hợp thành các ô liền kề bằng cách sử dụng (). $1đại diện cho mẫu đầu tiên được so khớp trong tập hợp đầu tiên ().

Private Sub splitUpRegexPattern()
    Dim regEx As New RegExp
    Dim strPattern As String
    Dim strInput As String
    Dim Myrange As Range

    Set Myrange = ActiveSheet.Range("A1:A3")

    For Each C In Myrange
        strPattern = "(^[0-9]{3})([a-zA-Z])([0-9]{4})"

        If strPattern <> "" Then
            strInput = C.Value

            With regEx
                .Global = True
                .MultiLine = True
                .IgnoreCase = False
                .Pattern = strPattern
            End With

            If regEx.test(strInput) Then
                C.Offset(0, 1) = regEx.Replace(strInput, "$1")
                C.Offset(0, 2) = regEx.Replace(strInput, "$2")
                C.Offset(0, 3) = regEx.Replace(strInput, "$3")
            Else
                C.Offset(0, 1) = "(Not matched)"
            End If
        End If
    Next
End Sub

Các kết quả:


Ví dụ về mẫu bổ sung

String   Regex Pattern                  Explanation
a1aaa    [a-zA-Z][0-9][a-zA-Z]{3}       Single alpha, single digit, three alpha characters
a1aaa    [a-zA-Z]?[0-9][a-zA-Z]{3}      May or may not have preceding alpha character
a1aaa    [a-zA-Z][0-9][a-zA-Z]{0,3}     Single alpha, single digit, 0 to 3 alpha characters
a1aaa    [a-zA-Z][0-9][a-zA-Z]*         Single alpha, single digit, followed by any number of alpha characters

</i8>    \<\/[a-zA-Z][0-9]\>            Exact non-word character except any single alpha followed by any single digit
209
Patrick Böker 2015-01-28 07:47.

Để sử dụng biểu thức chính quy trực tiếp trong công thức Excel, UDF (hàm do người dùng xác định) sau có thể hữu ích. Nó ít nhiều thể hiện trực tiếp chức năng biểu thức chính quy như một hàm excel.

Làm thế nào nó hoạt động

Nó có 2-3 tham số.

  1. Một văn bản để sử dụng biểu thức chính quy.
  2. Một biểu thức chính quy.
  3. Một chuỗi định dạng chỉ định kết quả trông như thế nào. Nó có thể chứa $0, $1, $2, và vân vân. $0là toàn bộ đối sánh $1và tương ứng với các nhóm đối sánh tương ứng trong biểu thức chính quy. Mặc định là $0.

Vài ví dụ

Trích xuất một địa chỉ email:

=regex("Peter Gordon: [email protected], 47", "\[email protected]\w+\.\w+")
=regex("Peter Gordon: [email protected], 47", "\[email protected]\w+\.\w+", "$0")

Kết quả trong: [email protected]

Trích xuất một số chuỗi con:

=regex("Peter Gordon: [email protected], 47", "^(.+): (.+), (\d+)$", "E-Mail: $2, Name: $1")

Kết quả trong: E-Mail: [email protected], Name: Peter Gordon

Để tách một chuỗi kết hợp trong một ô thành các thành phần của nó trong nhiều ô:

=regex("Peter Gordon: [email protected], 47", "^(.+): (.+), (\d+)$", "$" & 1)
=regex("Peter Gordon: [email protected], 47", "^(.+): (.+), (\d+)$", "$" & 2)

Kết quả là: Peter Gordon [email protected]...

Cách sử dụng

Để sử dụng UDF này, hãy làm như sau (gần như dựa trên trang này của Microsoft . Họ có một số thông tin bổ sung tốt ở đó!):

  1. Trong Excel trong tệp hỗ trợ Macro ('.xlsm') đẩy ALT+F11để mở Microsoft Visual Basic for Applications Editor.
  2. Thêm tham chiếu VBA vào thư viện Biểu thức chính quy (sao chép xấu hổ từ câu trả lời của Portland Runners ++ ):
    1. Nhấp vào Công cụ -> Tài liệu tham khảo (vui lòng bỏ qua ảnh chụp màn hình tiếng Đức)
    2. Tìm Microsoft VBScript Regular Expressions 5.5 trong danh sách và đánh dấu vào hộp kiểm bên cạnh nó.
    3. Bấm OK .
  3. Nhấp vào Chèn mô-đun . Nếu bạn đặt tên khác cho mô-đun của mình, hãy đảm bảo rằng Mô-đun không có cùng tên với UDF bên dưới (ví dụ: đặt tên cho Mô-đun Regexvà hàm regexgây ra lỗi #NAME! ).

  4. Trong cửa sổ văn bản lớn ở giữa, hãy chèn nội dung sau:

    Function regex(strInput As String, matchPattern As String, Optional ByVal outputPattern As String = "$0") As Variant
        Dim inputRegexObj As New VBScript_RegExp_55.RegExp, outputRegexObj As New VBScript_RegExp_55.RegExp, outReplaceRegexObj As New VBScript_RegExp_55.RegExp
        Dim inputMatches As Object, replaceMatches As Object, replaceMatch As Object
        Dim replaceNumber As Integer
    
        With inputRegexObj
            .Global = True
            .MultiLine = True
            .IgnoreCase = False
            .Pattern = matchPattern
        End With
        With outputRegexObj
            .Global = True
            .MultiLine = True
            .IgnoreCase = False
            .Pattern = "\$(\d+)"
        End With
        With outReplaceRegexObj
            .Global = True
            .MultiLine = True
            .IgnoreCase = False
        End With
    
        Set inputMatches = inputRegexObj.Execute(strInput)
        If inputMatches.Count = 0 Then
            regex = False
        Else
            Set replaceMatches = outputRegexObj.Execute(outputPattern)
            For Each replaceMatch In replaceMatches
                replaceNumber = replaceMatch.SubMatches(0)
                outReplaceRegexObj.Pattern = "\$" & replaceNumber
    
                If replaceNumber = 0 Then
                    outputPattern = outReplaceRegexObj.Replace(outputPattern, inputMatches(0).Value)
                Else
                    If replaceNumber > inputMatches(0).SubMatches.Count Then
                        'regex = "A to high $ tag found. Largest allowed is $" & inputMatches(0).SubMatches.Count & "."
                        regex = CVErr(xlErrValue)
                        Exit Function
                    Else
                        outputPattern = outReplaceRegexObj.Replace(outputPattern, inputMatches(0).SubMatches(replaceNumber - 1))
                    End If
                End If
            Next
            regex = outputPattern
        End If
    End Function
    
  5. Lưu và đóng cửa sổ Microsoft Visual Basic for Applications Editor.

67
SAm 2017-03-31 11:28.

Mở rộng câu trả lời của patszim cho những người đang gấp.

  1. Mở sổ làm việc Excel.
  2. Alt+ F11để mở cửa sổ VBA / Macros.
  3. Thêm tham chiếu vào regex trong Công cụ rồi Tham khảo
  4. và chọn Microsoft VBScript Regular Expression 5.5
  5. Chèn một mô-đun mới (mã cần phải nằm trong mô-đun nếu không nó không hoạt động).
  6. Trong mô-đun mới được chèn,
  7. thêm mã sau:

    Function RegxFunc(strInput As String, regexPattern As String) As String
        Dim regEx As New RegExp
        With regEx
            .Global = True
            .MultiLine = True
            .IgnoreCase = False
            .pattern = regexPattern
        End With
    
        If regEx.Test(strInput) Then
            Set matches = regEx.Execute(strInput)
            RegxFunc = matches(0).Value
        Else
            RegxFunc = "not matched"
        End If
    End Function
    
  8. Mẫu regex được đặt trong một trong các ô và tham chiếu tuyệt đối được sử dụng trên đó. Hàm sẽ được liên kết với sổ làm việc mà nó được tạo.
    Nếu có nhu cầu sử dụng nó trong các sổ làm việc khác nhau, hãy lưu trữ hàm trong Personal.XLSB

27
Vikas Gautam 2015-08-18 13:03.

Đây là nỗ lực của tôi:

Function RegParse(ByVal pattern As String, ByVal html As String)
    Dim regex   As RegExp
    Set regex = New RegExp

    With regex
        .IgnoreCase = True  'ignoring cases while regex engine performs the search.
        .pattern = pattern  'declaring regex pattern.
        .Global = False     'restricting regex to find only first match.

        If .Test(html) Then         'Testing if the pattern matches or not
            mStr = .Execute(html)(0)        '.Execute(html)(0) will provide the String which matches with Regex
            RegParse = .Replace(mStr, "$1") '.Replace function will replace the String with whatever is in the first set of braces - $1.
        Else
            RegParse = "#N/A"
        End If

    End With
End Function
9
DeezCashews 2017-03-18 16:41.

Tôi cần sử dụng nó như một hàm ô (như SUMhoặc VLOOKUP) và thấy rằng thật dễ dàng để:

  1. Đảm bảo rằng bạn đang ở trong Tệp Excel được Kích hoạt Macro (lưu dưới dạng xlsm).
  2. Mở công cụ dành cho nhà phát triển Alt+F11
  3. Thêm Microsoft VBScript Regular Expressions 5.5 như trong các câu trả lời khác
  4. Tạo hàm sau trong sổ làm việc hoặc trong mô-đun riêng của nó:

    Function REGPLACE(myRange As Range, matchPattern As String, outputPattern As String) As Variant
        Dim regex As New VBScript_RegExp_55.RegExp
        Dim strInput As String
    
        strInput = myRange.Value
    
        With regex
            .Global = True
            .MultiLine = True
            .IgnoreCase = False
            .Pattern = matchPattern
        End With
    
        REGPLACE = regex.Replace(strInput, outputPattern)
    
    End Function
    
  5. Sau đó, bạn có thể sử dụng trong ô với (ví dụ: "A 243" thành "A243")=REGPLACE(B1, "(\w) (\d+)", "$1$2")

8
Alex Roseland 2019-11-27 10:20.

Đây không phải là câu trả lời trực tiếp nhưng có thể cung cấp một giải pháp thay thế hiệu quả hơn để bạn cân nhắc. Đó là Google Trang tính có một số Chức năng Regex được tích hợp sẵn, những chức năng này có thể rất tiện lợi và giúp tránh một số quy trình kỹ thuật trong Excel. Rõ ràng là có một số lợi thế khi sử dụng Excel trên PC của bạn nhưng đối với phần lớn người dùng, Google Trang tính sẽ cung cấp trải nghiệm giống hệt nhau và có thể mang lại một số lợi ích về tính di động và chia sẻ tài liệu.

Họ cung cấp

REGEXEXTRACT: Trích xuất các chuỗi con phù hợp theo một biểu thức chính quy.

REGEXREPLACE: Thay thế một phần của chuỗi văn bản bằng một chuỗi văn bản khác bằng cách sử dụng biểu thức chính quy.

SUBSTITUTE: Thay thế văn bản hiện có bằng văn bản mới trong một chuỗi.

REPLACE: Thay thế một phần của chuỗi văn bản bằng một chuỗi văn bản khác.

Bạn có thể nhập những thứ này trực tiếp vào một ô như vậy và sẽ tạo ra bất kỳ thứ gì bạn muốn

=REGEXMATCH(A2, "[0-9]+")

Chúng cũng hoạt động khá tốt khi kết hợp với các hàm khác như câu lệnh IF như vậy:

=IF(REGEXMATCH(E8,"MiB"),REGEXEXTRACT(E8,"\d*\.\d*|\d*")/1000,IF(REGEXMATCH(E8,"GiB"),REGEXEXTRACT(E8,"\d*\.\d*|\d*"),"")

Hy vọng rằng điều này cung cấp một giải pháp đơn giản cho những người dùng cảm thấy bị chế nhạo bởi thành phần VBS của Excel.

4
jgreve 2017-07-29 11:19.

Đây là một regex_subst()chức năng. Ví dụ:

=regex_subst("watermellon", "[aeiou]", "")
---> wtrmlln
=regex_subst("watermellon", "[^aeiou]", "")
---> aeeo

Đây là mã đơn giản (dù sao thì cũng đơn giản hơn đối với tôi). Tôi không thể tìm ra cách xây dựng một mẫu đầu ra phù hợp bằng cách sử dụng ở trên để hoạt động như các ví dụ của tôi:

Function regex_subst( _
     strInput As String _
   , matchPattern As String _
   , Optional ByVal replacePattern As String = "" _
) As Variant
    Dim inputRegexObj As New VBScript_RegExp_55.RegExp

    With inputRegexObj
        .Global = True
        .MultiLine = True
        .IgnoreCase = False
        .Pattern = matchPattern
    End With

    regex_subst = inputRegexObj.Replace(strInput, replacePattern)
End Function
3
JvdV 2020-02-13 06:19.

Để thêm vào nội dung có giá trị, tôi muốn tạo lời nhắc này về lý do tại sao đôi khi RegEx trong VBA không lý tưởng. Không phải tất cả các biểu thức đều được hỗ trợ, nhưng thay vào đó có thể ném một Error 5017và có thể khiến tác giả đoán (mà chính tôi là nạn nhân).

Trong khi chúng tôi có thể tìm thấy một số nguồn về những gì được hỗ trợ, sẽ rất hữu ích nếu biết siêu ký tự nào, v.v. không được hỗ trợ. Có thể tìm thấy giải thích sâu hơn ở đây . Được đề cập trong nguồn này:

"Mặc dù" biểu thức chính quy của VBScript ... phiên bản 5.5 triển khai khá nhiều tính năng regex thiết yếu bị thiếu trong các phiên bản trước của VBScript. ... JavaScript và VBScript triển khai các biểu thức chính quy kiểu Perl. Tuy nhiên, chúng thiếu khá nhiều tính năng nâng cao có sẵn trong Perl và các loại biểu thức chính quy hiện đại khác: "


Vì vậy, không được hỗ trợ là:

  • Bắt đầu chuỗi ancor \A, hoặc sử dụng ^dấu mũ để khớp với vị trí trước ký tự thứ nhất trong chuỗi
  • End of String ancor \Z, hoặc sử dụng $ký hiệu đô la để khớp với vị trí sau ký tự cuối cùng trong chuỗi
  • Positive LookBehind, ví dụ: (?<=a)b(trong khi LookAhead postive được hỗ trợ)
  • LookBehind phủ định, ví dụ: (?<!a)b(trong khi LookAhead phủ định được hỗ trợ)
  • Nhóm nguyên tử
  • Bộ định lượng sở hữu
  • Ví dụ: Unicode: \{uFFFF}
  • Đã đặt tên Nhóm Chụp . Ngoài ra, sử dụng Nhóm chụp được đánh số
  • Các bổ ngữ nội dòng, ví dụ: /i(phân biệt chữ hoa chữ thường) hoặc /g(toàn cục), v.v ... Đặt chúng thông qua các RegExpthuộc tính đối tượng> RegExp.Global = TrueRegExp.IgnoreCase = Truenếu có.
  • Điều kiện
  • Nhận xét Biểu thức Thông thường . Thêm những điều này với 'nhận xét thông thường trong tập lệnh

Tôi đã gặp phải bức tường nhiều lần bằng cách sử dụng biểu thức chính quy trong VBA. Thông thường với LookBehindnhưng đôi khi tôi thậm chí quên các bổ ngữ. Tôi chưa tự mình trải nghiệm tất cả những phông nền được đề cập ở trên nhưng nghĩ rằng tôi sẽ cố gắng tham khảo rộng rãi một số thông tin chuyên sâu hơn. Hãy bình luận / sửa chữa / bổ sung. Hãy truy cập vào trang thường- expressions.info để biết thêm thông tin.

PS Bạn đã đề cập đến các phương thức và chức năng VBA thông thường, và tôi có thể xác nhận rằng chúng (ít nhất là với bản thân tôi) đã hữu ích theo cách riêng của chúng khi RegEx sẽ thất bại.

2
FreeSoftwareServers 2019-03-22 16:57.

Tôi không muốn phải kích hoạt thư viện tham chiếu vì tôi cần các tập lệnh của mình có thể di chuyển được. Đường Dim foo As New VBScript_RegExp_55.RegExpdây gây ra User Defined Type Not Definedlỗi, nhưng tôi đã tìm thấy giải pháp phù hợp với mình.

Cập nhật nhận xét RE w / @chrisneilsen:

Tôi có ấn tượng rằng việc bật thư viện tham chiếu được gắn với cài đặt máy tính cục bộ, nhưng trên thực tế, nó gắn trực tiếp với sổ làm việc. Vì vậy, bạn có thể kích hoạt thư viện tham chiếu, chia sẻ sổ làm việc được kích hoạt macro và người dùng cuối cũng không cần phải kích hoạt thư viện. Lưu ý: Ưu điểm của Late Binding là nhà phát triển không phải lo lắng về việc cài đặt nhầm phiên bản thư viện đối tượng trên máy tính của người dùng. Điều này có thể sẽ không phải là một vấn đề với VBScript_RegExp_55.RegExpthư viện, nhưng tôi không bán rằng món ăn "hiệu suất" đáng giá đối với tôi tại thời điểm này, vì chúng tôi đang nói những mili giây không thể nhận thấy trong mã của tôi. Tôi cảm thấy điều này xứng đáng được cập nhật để giúp những người khác hiểu. Nếu bạn bật thư viện tham chiếu, bạn có thể sử dụng "Early bind", nhưng nếu không, theo như tôi có thể nói, mã sẽ hoạt động tốt, nhưng bạn cần phải "late bind" và một số lỗi về hiệu suất / gỡ lỗi. đặc trưng.

Nguồn: https://peltiertech.com/Excel/EarlyLateBinding.html

Những gì bạn muốn làm là đặt một chuỗi ví dụ vào ô A1, sau đó kiểm tra strPattern. Khi nó hoạt động, hãy điều chỉnh rngtheo ý muốn.

Public Sub RegExSearch()
'https://stackoverflow.com/questions/22542834/how-to-use-regular-expressions-regex-in-microsoft-excel-both-in-cell-and-loops
'https://wellsr.com/vba/2018/excel/vba-regex-regular-expressions-guide/
'https://www.vitoshacademy.com/vba-regex-in-excel/
    Dim regexp As Object
    'Dim regex As New VBScript_RegExp_55.regexp 'Caused "User Defined Type Not Defined" Error
    Dim rng As Range, rcell As Range
    Dim strInput As String, strPattern As String
    
    Set regexp = CreateObject("vbscript.regexp")
    Set rng = ActiveSheet.Range("A1:A1")
        
    strPattern = "([a-z]{2})([0-9]{8})"
    'Search for 2 Letters then 8 Digits Eg: XY12345678 = Matched

    With regexp
        .Global = False
        .MultiLine = False
        .ignoreCase = True
        .Pattern = strPattern
    End With

    For Each rcell In rng.Cells

        If strPattern <> "" Then
            strInput = rcell.Value

            If regexp.test(strInput) Then
                MsgBox rcell & " Matched in Cell " & rcell.Address
            Else
                MsgBox "No Matches!"
            End If
        End If
    Next
End Sub

Related questions

MORE COOL STUFF

Cate Blanchett chia tay chồng sau 3 ngày bên nhau và vẫn kết hôn với anh ấy 25 năm sau

Cate Blanchett chia tay chồng sau 3 ngày bên nhau và vẫn kết hôn với anh ấy 25 năm sau

Cate Blanchett đã bất chấp những lời khuyên hẹn hò điển hình khi cô gặp chồng mình.

Tại sao Michael Sheen là một diễn viên phi lợi nhuận

Tại sao Michael Sheen là một diễn viên phi lợi nhuận

Michael Sheen là một diễn viên phi lợi nhuận nhưng chính xác thì điều đó có nghĩa là gì?

Hallmark Star Colin Egglesfield Các món ăn gây xúc động mạnh đối với người hâm mộ tại RomaDrama Live! [Loại trừ]

Hallmark Star Colin Egglesfield Các món ăn gây xúc động mạnh đối với người hâm mộ tại RomaDrama Live! [Loại trừ]

Ngôi sao của Hallmark Colin Egglesfield chia sẻ về những cuộc gặp gỡ với người hâm mộ ly kỳ tại RomaDrama Live! cộng với chương trình INSPIRE của anh ấy tại đại hội.

Tại sao bạn không thể phát trực tuyến 'chương trình truyền hình phía Bắc'

Tại sao bạn không thể phát trực tuyến 'chương trình truyền hình phía Bắc'

Bạn sẽ phải phủi sạch đầu đĩa Blu-ray hoặc DVD để xem tại sao Northern Exposure trở thành một trong những chương trình nổi tiếng nhất của thập niên 90.

Where in the World Are You? Take our GeoGuesser Quiz

Where in the World Are You? Take our GeoGuesser Quiz

The world is a huge place, yet some GeoGuessr players know locations in mere seconds. Are you one of GeoGuessr's gifted elite? Take our quiz to find out!

8 công dụng tuyệt vời của Baking Soda và Giấm

8 công dụng tuyệt vời của Baking Soda và Giấm

Bạn biết đấy, hai sản phẩm này là nguồn điện để làm sạch, riêng chúng. Nhưng cùng với nhau, chúng có một loạt công dụng hoàn toàn khác.

Hạn hán, biến đổi khí hậu đe dọa tương lai của thủy điện Hoa Kỳ

Hạn hán, biến đổi khí hậu đe dọa tương lai của thủy điện Hoa Kỳ

Thủy điện rất cần thiết cho lưới điện của Hoa Kỳ, nhưng nó chỉ tạo ra năng lượng khi có nước di chuyển. Bao nhiêu nhà máy thủy điện có thể gặp nguy hiểm khi các hồ và sông cạn kiệt?

Quyên góp tóc của bạn để giúp giữ nước sạch của chúng tôi

Quyên góp tóc của bạn để giúp giữ nước sạch của chúng tôi

Tóc tỉa từ các tiệm và các khoản quyên góp cá nhân có thể được tái sử dụng như những tấm thảm thấm dầu và giúp bảo vệ môi trường.

Xem đoạn giới thiệu cho bộ phim chuyển thể đầy khói lửa, có sự góp mặt của ngôi sao Edward Norton từ phim Motherless Brooklyn của Jonathan Lethem

Xem đoạn giới thiệu cho bộ phim chuyển thể đầy khói lửa, có sự góp mặt của ngôi sao Edward Norton từ phim Motherless Brooklyn của Jonathan Lethem

Edward Norton đã muốn đưa cuốn tiểu thuyết Motherless Brooklyn của Jonathan Lethem's Joycean 1999 lên màn ảnh kể từ khi nó được xuất bản. Bây giờ, 20 năm sau, một đoạn giới thiệu đã xuất hiện cho câu chuyện sôi nổi, đưa câu chuyện của Lethem trở lại những năm 1950 với rất nhiều gương mặt quen thuộc.

Cách dễ dàng chọn không tham gia trọng tài ràng buộc thẻ Apple

Cách dễ dàng chọn không tham gia trọng tài ràng buộc thẻ Apple

Có thích thú khi sử dụng Thẻ Apple mới của bạn không? Trước khi bạn bắt đầu chi tiêu, có một nhiệm vụ bổ sung cần xem xét: chọn không tham gia trọng tài ràng buộc. Bạn sẽ phát hiện ra các điều khoản trọng tài ràng buộc trong nhiều thỏa thuận tài chính vì nó giúp ngăn các ngân hàng và đối tác kinh doanh của họ không phải ra tòa.

Những người chơi Fortnite World Cup không ghi bàn có cảm giác hài hước về điều đó

Những người chơi Fortnite World Cup không ghi bàn có cảm giác hài hước về điều đó

Điểm số tại vòng chung kết Fortnite World Cup Solo hôm nay là rất lớn, với người chiến thắng Bugha ghi được nhiều hơn 26 điểm so với người về thứ hai là Psalm. Nhưng không phải ai cũng có thể giành chiến thắng: Bốn cầu thủ ra về với 0 điểm, nhưng — ít nhất là trên Twitter — họ là những người thể thao tốt về điều đó.

Báo cáo: Cánh cửa tuyển sinh có thể đã mở cho các ứng viên UCLA có mối quan hệ có ảnh hưởng

Báo cáo: Cánh cửa tuyển sinh có thể đã mở cho các ứng viên UCLA có mối quan hệ có ảnh hưởng

Huấn luyện viên trưởng của bộ môn thể dục dụng cụ UCLA Valorie Kondos-Field theo dõi Katelyn Ohashi thi đấu thăng bằng trong trận gặp Stanford tại Pauley Pavilion vào ngày 10 tháng 3 năm 2019 ở Los Angeles, California. Vụ bê bối gian lận tuyển sinh đại học tiết lộ các chi tiết của một quá trình chính thức hóa để đưa những đứa trẻ thất bại của các gia đình giàu có và nổi tiếng vào các trường đại học đáng tin cậy và danh tiếng, sử dụng một "cửa phụ" đắt tiền cho các bậc cha mẹ mà sự giàu có của họ khiến họ không có cơ hội. chỉ cần tài trợ cho một cánh mới trong khuôn viên trường.

Nicky Hilton Forced to Borrow Paris' 'I Love Paris' Sweatshirt After 'Airline Loses All [My] Luggage'

Nicky Hilton Forced to Borrow Paris' 'I Love Paris' Sweatshirt After 'Airline Loses All [My] Luggage'

Nicky Hilton Rothschild's luggage got lost, but luckily she has an incredible closet to shop: Sister Paris Hilton's!

Kate Middleton dành một ngày bên bờ nước ở London, cùng với Jennifer Lopez, Julianne Hough và hơn thế nữa

Kate Middleton dành một ngày bên bờ nước ở London, cùng với Jennifer Lopez, Julianne Hough và hơn thế nữa

Kate Middleton dành một ngày bên bờ nước ở London, cùng với Jennifer Lopez, Julianne Hough và hơn thế nữa. Từ Hollywood đến New York và mọi nơi ở giữa, hãy xem các ngôi sao yêu thích của bạn đang làm gì!

17 tuổi bị đâm chết trong khi 4 người khác bị thương trong một cuộc tấn công bằng dao trên sông Wisconsin

17 tuổi bị đâm chết trong khi 4 người khác bị thương trong một cuộc tấn công bằng dao trên sông Wisconsin

Các nhà điều tra đang xem xét liệu nhóm và nghi phạm có biết nhau trước vụ tấn công hay không

Thanh thiếu niên, Gia đình Florida Hội đồng quản trị trường học về Luật 'Không nói đồng tính': 'Buộc chúng tôi tự kiểm duyệt'

Thanh thiếu niên, Gia đình Florida Hội đồng quản trị trường học về Luật 'Không nói đồng tính': 'Buộc chúng tôi tự kiểm duyệt'

Vụ kiện, nêu tên một số học khu, lập luận rằng dự luật "Không nói đồng tính" được ban hành gần đây của Florida "có hiệu quả im lặng và xóa bỏ học sinh và gia đình LGBTQ +"

Hãy tưởng tượng tạo ra một chiến lược nội dung thực sự CHUYỂN ĐỔI. Nó có thể.

Hãy tưởng tượng tạo ra một chiến lược nội dung thực sự CHUYỂN ĐỔI. Nó có thể.

Vào năm 2021, tôi khuyến khích bạn suy nghĩ lại mọi thứ bạn biết về khách hàng mà bạn phục vụ và những câu chuyện bạn kể cho họ. Lùi lại.

Sự mất mát của voi ma mút đã mở ra trái tim tôi để yêu

Sự mất mát của voi ma mút đã mở ra trái tim tôi để yêu

Vào ngày sinh nhật thứ 9 của Felix The Cat, tôi nhớ về một trong những mất mát lớn nhất trong cuộc đời trưởng thành của tôi - Sophie của tôi vào năm 2013. Tôi đã viết bài luận này và chia sẻ nó trên nền tảng này một thời gian ngắn vào năm 2013.

Khi bạn không thể trở thành người mà Internet muốn bạn trở thành

Khi bạn không thể trở thành người mà Internet muốn bạn trở thành

Tôi ghét từ "tàu đắm". Mọi người cảm thấy thoải mái trong la bàn đạo đức của riêng mình, và khi làm như vậy, họ thấy mình vượt qua sự phán xét.

Tầm nhìn đám mây phi tập trung của DFINITY Blockchain

Lưu ý của người biên tập: Bạn đang xem tài liệu lỗi thời từ blog DFINITY đang được bảo quản cho mục đích lưu trữ.

Tầm nhìn đám mây phi tập trung của DFINITY Blockchain

Bài đăng này khám phá tầm nhìn về đám mây phi tập trung của nhóm DFINITY và cách nó liên quan đến các nhà cung cấp blockchain truyền thống và đám mây hiện có như Amazon Web Services. Các minh chứng về công nghệ DFINITY được áp dụng bởi một mạng lưới quy mô lớn sẽ được thực hiện vào mùa thu năm 2017, sau đó sẽ được gây quỹ Chính cho quỹ hỗ trợ phi lợi nhuận, với mạng “đám mây mở” dự kiến ​​sẽ ra mắt vào đầu mùa hè năm 2018 .

Language