Cara Menggunakan RegEx di Microsoft Word - Tips Excel

Lissa bertanya:

Apakah ada cara untuk mengubah angka (selalu angka acak) setelah kata rubah? Contoh: rubah 23, beruang 1, rubah 398, katak 12, rubah 15. Saya ingin mengubah angkanya menjadi warna yang sama dengan kata rubah.

Kita dapat menemukan dan mengganti dengan format di Microsoft Word. Ini adalah fitur hebat untuk menemukan teks yang diformat dengan cepat, dan bahkan mengganti seluruh format teks dalam dokumen.

Pilih Temukan Tingkat Lanjut di pita.

Temukan dan Ganti Dialog

Masukkan teks yang akan dicari, lalu klik tombol Lainnya untuk melihat opsi lanjutan, dan klik tombol Format.

Opsi Pencarian Tingkat Lanjut

Pilih opsi Font di pengaturan, lalu Anda dapat mengatur warna teks yang ingin Anda temukan di dokumen. Klik OK untuk menutup jendela dialog Find Font.

Pilih warna teks dalam dialog Temukan Font.

Klik Find Next, dan Anda akan melihat kemunculan pertama dari teks yang sedang dicari dalam warna tertentu akan dipilih.

Temukan Berikutnya untuk menemukan kejadian pertama.

Kami juga dapat melakukan pencarian yang lebih rumit dengan menggunakan wildcard. Namun, modul pencarian asli Word tidak mengizinkan kami melakukan pencarian seperti yang diminta Lissa.

Di situlah kita bisa memanggil RegEx ke dalam game!

Pustaka Ekspresi Reguler VBSCript

VBA tidak dikirimkan dengan dukungan ekspresi reguler. Namun pustaka Microsoft VBScript berisi kemampuan ekspresi reguler yang kuat. Pustaka ini adalah bagian dari Internet Explorer 5.5 dan yang lebih baru, sehingga tersedia di semua komputer yang menjalankan Windows XP, Vista, 7, 8, 8.1, atau 10.

Pengguna Mac

Karena Internet Explorer bukan aplikasi Mac, pustaka ini tidak ada di Mac. Oleh karena itu, contoh VBA di bawah ini tidak berfungsi di Mac.

Untuk menggunakan pustaka ini di VBA, alihkan ke VBE, pilih Project dan Referensi di menu VBE, lalu gulir ke bawah daftar untuk menemukan item "Microsoft VBScript Regular Expressions 5.5", dan centang untuk disertakan dalam aplikasi.

Perpustakaan Ekspresi Reguler VBScript

Masukkan modul baru, dan salin dan tempel kode berikut ke dalam modul ini.

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

Prosedur ini mengambil contoh teks, menemukan kode produk dengan pola yang diberikan - yang dimulai dengan "rubah", spasi tunggal dan angka, dan mencetak kode yang cocok di jendela Segera (tekan Ctrl + G di VBE jika tidak sudah terlihat).

Kode produk yang cocok dicetak di jendela Immediate.

d+ kelas karakter dalam pola mendefinisikan satu atau lebih karakter numerik, dan pola pada dasarnya adalah awalan "rubah" yang diikuti oleh spasi diikuti oleh angka.

Info lebih lanjut

Kunjungi Regular Expression Language - Referensi Cepat untuk informasi lebih lanjut tentang pelarian karakter, kelas karakter, dan jangkar.

Salin dan tempel kode berikut untuk melihat RegEx beraksi untuk menghapus spasi dari kode produk.

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

This procedure replaces the sample text content by removing the spaces from the product codes matched with the given pattern, and prints the result text in the Immediate window.

Replaced text printed in the Immediate window.

Please note that pattern is slightly different than the first code. Terms in this pattern are enclosed with parentheses, and corresponding terms are used in the Replace method as $1 and $2 in order. This procedure simply joins the two terms without spaces.

Back to the Question

Let's go back to the sample text we used at the beginning of this article.

Sample Text

We need to find "fox" followed by numeric characters, and change the match by using the color of the "fox" section in the matched text.

Although RegEx is very good matching by the given pattern, it cannot replace the color of text in Word document. So we will combine RegEx and Word VBA methods in the following procedure.

Here are the steps:

  1. Find the matches with RegEx.
  2. Search each matched text by using Word Find method.
  3. Find the color of the first word in the found range.
  4. Change the color of the found range with the color in the previous step.

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

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 

Run the code, and here is the result.

Result

Download Word File

To download the Word file: how-to-use-regex-in-microsoft-word.docm

RegEx in Excel?

Regex is completely missing from Excel. However, we can still use VBScript Regular Expressions in 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

Artikel yang menarik...