Cách sử dụng RegEx trong Microsoft Word - Thủ thuật Excel

Lissa hỏi:

Có cách nào để thay đổi một số (luôn là số ngẫu nhiên) sau từ cáo không? Ví dụ: con cáo 23, con gấu 1, con cáo 398, con ếch 12, con cáo 15. Tôi muốn đổi số thành cùng màu của từ cáo.

Chúng tôi có thể tìm và thay thế theo định dạng trong Microsoft Word. Đây là một tính năng tuyệt vời để nhanh chóng tìm thấy văn bản được định dạng, và thậm chí thay thế toàn bộ định dạng văn bản trong tài liệu.

Chọn Tìm nâng cao trên ruy-băng.

Hộp thoại Tìm và Thay thế

Nhập văn bản cần tìm, sau đó nhấp vào nút Khác để xem các tùy chọn nâng cao và nhấp vào nút Định dạng.

Tùy chọn Tìm Nâng cao

Chọn tùy chọn Phông chữ trong cài đặt, sau đó bạn có thể thiết lập màu văn bản mà bạn muốn tìm thấy trong tài liệu. Bấm OK để đóng cửa sổ hộp thoại Tìm Phông chữ.

Chọn màu văn bản trong hộp thoại Tìm Phông chữ.

Nhấp vào Tìm Tiếp theo, và bạn sẽ thấy lần xuất hiện đầu tiên của văn bản đang được tìm kiếm bằng một màu nhất định sẽ được chọn.

Tìm Tiếp theo để tìm lần xuất hiện đầu tiên.

Chúng tôi cũng có thể thực hiện các tìm kiếm phức tạp hơn bằng cách sử dụng các ký tự đại diện. Tuy nhiên, mô-đun tìm kiếm gốc của Word không cho phép chúng tôi thực hiện tìm kiếm theo cách Lissa yêu cầu.

Đó là nơi chúng ta có thể gọi RegEx vào trò chơi!

Thư viện biểu thức chính quy VBSCript

VBA không giao hàng với bất kỳ hỗ trợ biểu thức chính quy nào. Tuy nhiên, thư viện VBScript của Microsoft chứa khả năng biểu thức chính quy mạnh mẽ. Thư viện này là một phần của Internet Explorer 5.5 trở lên, vì vậy nó có sẵn trên tất cả các máy tính chạy Windows XP, Vista, 7, 8, 8.1 hoặc 10.

Người dùng Mac

Vì Internet Explorer không phải là ứng dụng Mac nên thư viện này không tồn tại trong Mac. Do đó, các mẫu VBA dưới đây không hoạt động trong Mac.

Để sử dụng thư viện này trong VBA, hãy chuyển sang VBE, chọn Dự án và Tham chiếu trong menu VBE, sau đó cuộn xuống danh sách để tìm mục "Microsoft VBScript Regular Expressions 5.5" và đánh dấu vào nó để đưa vào ứng dụng.

Thư viện biểu thức chính quy VBScript

Chèn một mô-đun mới, sao chép và dán mã sau vào mô-đun này.

Sub doRegexFind() Dim strSample As String Dim objRegex As RegExp Dim matches As MatchCollection Dim fnd As Match strSample = "First product code is fox 12, second one is fox 22, and third product is fox 45." Set objRegex = New RegExp With objRegex .Pattern = "fox d+" .Global = True .IgnoreCase = True Set matches = .Execute(strSample) For Each fnd In matches Debug.Print fnd Next fnd End With End Sub

Quy trình này lấy văn bản mẫu, tìm mã sản phẩm theo mẫu đã cho - bắt đầu bằng "con cáo", dấu cách đơn và một số, và in các mã phù hợp trong cửa sổ Ngay lập tức (nhấn Ctrl + G trong VBE nếu không đã hiển thị).

Mã sản phẩm phù hợp được in trong cửa sổ Ngay lập tức.

d+ lớp ký tự trong mẫu xác định một hoặc nhiều ký tự số và mẫu về cơ bản là tiền tố "cáo", theo sau là khoảng trắng theo sau là số.

Thêm thông tin

Truy cập Ngôn ngữ biểu thức chính quy - Tham khảo nhanh để biết thêm thông tin về các lần thoát ký tự, lớp ký tự và neo.

Sao chép và dán mã sau để xem RegEx đang hoạt động để xóa khoảng trắng khỏi mã sản phẩm.

Sub doRegexFindReplace() Dim objRegex As RegExp Dim matches As MatchCollection Dim fnd As Match Dim strSample As String strSample = "First product code is fox 12, second one is fox 22, and third product is fox 45." Set objRegex = New RegExp With objRegex .Pattern = "(fox) (d+)" .Global = True .IgnoreCase = True strSample = .Replace(strSample, "$1$2") End With Debug.Print strSample End Sub

Quy trình này thay thế nội dung văn bản mẫu bằng cách xóa khoảng trắng khỏi các mã sản phẩm khớp với mẫu đã cho và in văn bản kết quả trong cửa sổ Ngay lập tức.

Văn bản đã thay thế được in trong cửa sổ Ngay lập tức.

Xin lưu ý rằng mẫu hơi khác so với mã đầu tiên. Các thuật ngữ trong mẫu này được đặt trong dấu ngoặc đơn và các thuật ngữ tương ứng được sử dụng trong phương pháp Replace dưới dạng $ 1 và $ 2 theo thứ tự. Thủ tục này chỉ đơn giản là nối hai thuật ngữ mà không có dấu cách.

Quay lại câu hỏi

Hãy quay lại với bài văn mẫu mà chúng ta đã sử dụng ở đầu bài viết này.

Văn bản mẫu

Chúng ta cần tìm "fox" theo sau là các ký tự số và thay đổi kết quả khớp bằng cách sử dụng màu của phần "fox" trong văn bản được so khớp.

Mặc dù RegEx khớp rất tốt theo mẫu đã cho, nhưng nó không thể thay thế màu của văn bản trong tài liệu Word. Vì vậy, chúng tôi sẽ kết hợp các phương thức RegEx và Word VBA trong thủ tục sau.

Đây là các bước:

  1. Tìm các kết quả phù hợp với RegEx.
  2. Tìm kiếm từng văn bản phù hợp bằng cách sử dụng phương pháp Tìm từ.
  3. Tìm màu của từ đầu tiên trong phạm vi tìm được.
  4. Thay đổi màu của dải ô được tìm thấy bằng màu ở bước trước.

Chuyển sang VBE và chèn một mô-đun mới. Đảm bảo rằng thư viện Biểu thức chính quy VBScript được thêm vào dự án, đồng thời sao chép và dán mã sau vào mô-đun mới này.

Sub doRegexMagic() Dim str As String Dim objRegex As RegExp Dim matches As MatchCollection Dim fnd As Match Set objRegex = New RegExp str = "fox" With Selection .HomeKey wdStory .WholeStory End With With objRegex .Pattern = str & " d+" .Global = True .IgnoreCase = True Set matches = .Execute(Selection.Text) End With With Selection .HomeKey wdStory With .Find .ClearFormatting .Forward = True .Format = False .MatchCase = True For Each fnd In matches .Text = fnd .Execute With Selection .Font.Fill.ForeColor = .Range.Words(1).Font.TextColor .MoveRight wdCharacter End With Next fnd End With .HomeKey wdStory End With End Sub 

Chạy mã và đây là kết quả.

Kết quả

Tải xuống tệp Word

Để tải xuống tệp Word: how-to-use-regex-in-microsoft-word.docm

RegEx trong Excel?

Regex hoàn toàn không có trong Excel. Tuy nhiên, chúng ta vẫn có thể sử dụng Biểu thức chính quy VBScript trong Excel VBA.

Launch Excel, open a new workbook, and create the content as shown below.

Sample data in Excel

Reference

This article has been inspired by Learn Excel 2010 - "Find & Replace Color of A Certain Word": Podcast #1714 published by Bill Jelen on May 21, 2013! So we wanted to use similar sample text as he used in the video. We just added numbers after the "fox".

Switch to VBE, and insert a new module. Make sure VBScript Regular Expressions library is added to the project just like you did in Word, and copy and paste the following code into this new module.

Sub doRegexMagicInExcel() Dim str As String Dim objRegex As RegExp Dim matches As MatchCollection Dim fnd As Match Dim rng As Range Dim cll As Range Set objRegex = New RegExp Set rng = Selection str = "fox" With objRegex .Pattern = "(" & str & ") (d+)" .Global = True .IgnoreCase = True For Each cll In rng.Cells Set matches = .Execute(cll.Value) For Each fnd In matches cll.Value = .Replace(cll.Value, "$1$2") Next fnd Next cll End With End Sub

Return to worksheet, and select the range with sample text. Run the macro, and see the result.

Result in Excel

This procedure loops through the cells in the selected range, replaces the text in the cells by removing the spaces from the product codes matched with the given RegEx pattern.

Download Excel File

To download the Excel file: how-to-use-regex-in-microsoft-excel.xlsm

thú vị bài viết...