Daftar Isi
Pernahkah Anda berpikir betapa hebatnya Excel jika seseorang dapat memperkaya kotak peralatannya dengan ekspresi reguler? Kami tidak hanya berpikir tetapi juga mengerjakannya :) Dan sekarang, Anda dapat menambahkan fungsi RegEx yang luar biasa ini ke buku kerja Anda sendiri dan menghapus substring yang cocok dengan pola dalam waktu singkat!
Minggu lalu, kami melihat cara menggunakan ekspresi reguler untuk mengganti string di Excel. Untuk ini, kami membuat fungsi Regex Replace kustom. Ternyata, fungsi tersebut melampaui penggunaan utamanya dan tidak hanya dapat mengganti string tetapi juga menghapusnya. Bagaimana bisa? Dalam istilah Excel, menghapus nilai tidak lain adalah menggantinya dengan string kosong, sesuatu yang fungsi Regex kami adalahsangat bagus!
Fungsi VBA RegExp untuk menghapus substring di Excel
Seperti yang kita semua tahu, ekspresi reguler tidak didukung di Excel secara default. Untuk mengaktifkannya, Anda perlu membuat fungsi yang ditentukan pengguna Anda sendiri. Kabar baiknya adalah bahwa fungsi seperti itu sudah ditulis, diuji, dan siap digunakan. Yang harus Anda lakukan adalah menyalin kode ini, menempelkannya di editor VBA Anda, dan kemudian menyimpan file Anda sebagai buku kerja berkemampuan makro (.xlsm).
Fungsi ini memiliki sintaksis berikut ini:
RegExpReplace(teks, pola, penggantian, [instance_num], [match_case])Tiga argumen pertama diperlukan, dua argumen terakhir bersifat opsional.
Di mana:
- Teks - string teks yang akan dicari.
- Pola - ekspresi reguler yang akan dicari.
- Penggantian - teks yang akan diganti. Untuk hapus substring yang cocok dengan pola, gunakan string kosong ("") untuk penggantian.
- Instance_num (opsional) - instance yang akan diganti. Jika dihilangkan, semua kecocokan yang ditemukan akan diganti (default).
- Match_case (opsional) - nilai Boolean yang menunjukkan apakah akan mencocokkan atau mengabaikan kasus teks. Untuk pencocokan case-sensitive, gunakan TRUE (default); untuk case-insensitive - FALSE.
Untuk informasi lebih lanjut, silakan lihat fungsi RegExpReplace.
Tip. Dalam kasus sederhana, Anda dapat menghapus karakter atau kata tertentu dari sel dengan rumus Excel. Tetapi ekspresi reguler memberikan lebih banyak opsi untuk ini.
Cara menghapus string menggunakan ekspresi reguler - contoh
Seperti yang disebutkan di atas, untuk menghapus bagian teks yang cocok dengan pola, Anda harus menggantinya dengan string kosong. Jadi, rumus umum mengambil bentuk ini:
RegExpReplace(teks, pola, "", [instance_num], [match_case])Contoh-contoh di bawah ini menunjukkan berbagai implementasi konsep dasar ini.
Hapus semua kecocokan atau kecocokan tertentu
Fungsi RegExpReplace didesain untuk menemukan semua substring yang cocok dengan regex yang diberikan. Kejadian mana yang akan dihapus dikendalikan oleh argumen opsional ke-4, bernama instance_num .
Standarnya adalah "all matches" - ketika instance_num argumen dihilangkan, semua kecocokan yang ditemukan akan dihapus. Untuk menghapus kecocokan tertentu, tentukan nomor instance.
Pada string di bawah ini, misalkan Anda ingin menghapus nomor urutan pertama. Semua nomor tersebut dimulai dengan tanda hash (#) dan berisi tepat 5 digit. Jadi, kita dapat mengidentifikasinya menggunakan regex ini:
Pola : #\d{5}\b
Batas kata \b menentukan bahwa substring yang cocok tidak dapat menjadi bagian dari string yang lebih besar seperti # 10000001.
Untuk menghapus semua kecocokan, tombol instance_num argumen tidak didefinisikan:
=RegExpReplace(A5, "#\d{5}\b", "")
Untuk membasmi hanya kejadian pertama, kami menetapkan instance_num argumen ke 1:
=RegExpReplace(A5, "#\d{5}\b", "", 1)
Regex untuk menghapus karakter tertentu
Untuk menghilangkan karakter tertentu dari string, cukup tuliskan semua karakter yang tidak diinginkan dan pisahkan dengan bilah vertikal
Misalnya, untuk menstandarkan nomor telepon yang ditulis dalam berbagai format, pertama-tama kita menyingkirkan karakter tertentu seperti tanda kurung, tanda hubung, titik, dan spasi.
Pola : \(
=RegExpReplace(A5, "\(
Hasil dari operasi ini adalah angka 10 digit seperti "1234567890".
Untuk kenyamanan, Anda dapat memasukkan regex adalah sel terpisah, dan merujuk ke sel itu menggunakan referensi absolut seperti $ A $ 2:
=RegExpReplace(A5, $A$2, "")
Dan kemudian, Anda dapat menstandarkan pemformatan seperti yang Anda inginkan dengan menggunakan operator penggabungan (&) dan fungsi Teks seperti RIGHT, MID dan LEFT.
Misalnya, untuk menulis semua nomor telepon dalam format (123) 456-7890, rumusnya adalah:
="("&LEFT(B5, 3)&") "&MID(B5, 4, 3)&"-"&RIGHT(B5, 4)
Di mana B5 adalah output dari fungsi RegExpReplace.
Hapus karakter khusus menggunakan regex
Dalam salah satu tutorial kami, kami melihat cara menghapus karakter yang tidak diinginkan di Excel menggunakan fungsi bawaan dan kustom. Ekspresi reguler membuat segalanya jauh lebih mudah! Alih-alih mencantumkan semua karakter untuk dihapus, cukup tentukan karakter yang ingin Anda simpan :)
Pola ini didasarkan pada kelas karakter yang dinegasikan - caret diletakkan di dalam kelas karakter [^ ] untuk mencocokkan setiap karakter tunggal yang TIDAK dalam tanda kurung. Kuantifier + memaksanya untuk menganggap karakter yang berurutan sebagai satu kecocokan, sehingga penggantian dilakukan untuk substring yang cocok, bukan untuk setiap karakter individu.
Tergantung pada kebutuhan Anda, pilih salah satu regex berikut ini.
Untuk menghapus non-alfanumerik karakter, yaitu semua karakter kecuali huruf dan digit:
Pola : [^0-9a-zA-Z]+
Untuk membersihkan semua karakter kecuali surat , digit dan ruang :
Pola : [^0-9a-zA-Z ]+
Untuk menghapus semua karakter kecuali surat , digit dan garis bawah , Anda dapat menggunakan \W yang merupakan singkatan dari karakter apa pun yang BUKAN karakter alfanumerik atau garis bawah:
Pola : \W+
Jika Anda ingin menyimpan beberapa karakter lain , misalnya, tanda baca, letakkan di dalam tanda kurung.
Misalnya, untuk menghilangkan karakter apa pun selain huruf, digit, titik, koma, atau spasi, gunakan regex berikut:
Pola : [^0-9a-zA-Z\., ]+
Ini berhasil menghilangkan semua karakter khusus, tetapi spasi ekstra tetap ada.
Untuk memperbaikinya, Anda dapat menyatukan fungsi di atas ke dalam fungsi lain yang menggantikan beberapa spasi dengan satu karakter spasi.
=RegExpReplace(RegExpReplace(A5,$A$2,""), " +", " ")
Atau, gunakan saja fungsi TRIM asli dengan efek yang sama:
=TRIM(RegExpReplace(A5, $A$2, ""))
Regex untuk menghapus karakter non-numerik
Untuk menghapus semua karakter non-numerik dari sebuah string, Anda dapat menggunakan rumus panjang ini atau salah satu regex yang sangat sederhana yang tercantum di bawah ini.
Cocokkan karakter apa pun yang BUKAN digit:
Pola : \D+
Menghilangkan karakter non-numerik menggunakan kelas negasi:
Pola : [^0-9]+
Pola : [^\d]+
Tip. Jika tujuan Anda adalah menghapus teks dan menumpahkan angka yang tersisa ke dalam sel terpisah atau menempatkan semuanya dalam satu sel yang dipisahkan dengan pembatas tertentu, gunakan fungsi RegExpExtract seperti yang dijelaskan di Cara mengekstrak angka dari string menggunakan ekspresi reguler.
Regex untuk menghapus segala sesuatu setelah spasi
Untuk menghapus semua setelah spasi, gunakan karakter spasi ( ) atau spasi (\s) untuk menemukan spasi pertama dan .* untuk mencocokkan karakter apa pun setelahnya.
Jika Anda memiliki string baris tunggal yang hanya berisi spasi normal (nilai 32 dalam sistem ASCII 7-bit), tidak terlalu penting regex mana yang Anda gunakan. Dalam kasus string multi-baris, hal itu membuat perbedaan.
Untuk menghapus segalanya setelah karakter spasi , gunakan regex ini:
Pola : " .*"
=RegExpReplace(A5, " .*", "")
Formula ini akan menghapus apa pun setelah spasi pertama dalam setiap baris Agar hasilnya ditampilkan dengan benar, pastikan untuk mengaktifkan Wrap Text (Teks Bungkus).
Untuk menanggalkan segalanya setelah spasi (termasuk spasi, tab, carriage return, dan baris baru), regexnya adalah:
Pola : \s.*
=RegExpReplace(A5, "\s.*", "")
Karena \s cocok dengan beberapa jenis spasi yang berbeda termasuk baris baru (\n), rumus ini menghapus semua yang ada setelah spasi pertama dalam sel, tidak peduli berapa banyak baris yang ada di dalamnya.
Regex untuk menghapus teks setelah karakter tertentu
Dengan menggunakan metode dari contoh sebelumnya, Anda dapat menghapus teks setelah karakter apa pun yang Anda tentukan.
Untuk menangani setiap baris secara terpisah:
Pola umum : char.*
Dalam string baris tunggal, ini akan menghapus segala sesuatu setelah char Dalam string multi-baris, setiap baris akan diproses satu per satu karena dalam rasa Regex VBA, titik (.) cocok dengan karakter apa pun kecuali baris baru.
Untuk memproses semua baris sebagai string tunggal:
Pola umum : char(.
Untuk menghapus apa pun setelah karakter tertentu, termasuk baris baru, \n ditambahkan ke pola.
Misalnya, untuk menghapus teks setelah koma pertama dalam string, cobalah ekspresi reguler ini:
Pola : ,.*
Pola : ,(.
Pada tangkapan layar di bawah ini, Anda bisa memeriksa bagaimana hasilnya berbeda.
Regex untuk menghapus segala sesuatu sebelum spasi
Ketika bekerja dengan string teks yang panjang, terkadang Anda mungkin ingin membuatnya lebih pendek dengan menghapus bagian informasi yang sama di semua sel. Di bawah ini kita akan membahas dua kasus seperti itu.
Hapus segala sesuatu sebelum spasi terakhir
Seperti contoh sebelumnya, ekspresi reguler bergantung pada pemahaman Anda tentang "spasi".
Untuk mencocokkan apa pun hingga ruang terakhir , regex ini bisa digunakan (tanda kutip ditambahkan untuk membuat spasi setelah tanda bintang terlihat).
Pola : ".* "
Untuk mencocokkan apa pun sebelum spasi terakhir (termasuk spasi, tab, carriage return, dan baris baru), gunakan regular expression ini.
Pola : .*\s
Perbedaannya terutama terlihat pada string multi-line.
Hapus segala sesuatu sebelum spasi pertama
Untuk mencocokkan apa pun hingga spasi pertama dalam string, Anda dapat menggunakan ekspresi reguler ini:
Pola : ^[^ ]* +
Dari awal string ^, kami mencocokkan nol atau lebih karakter non-spasi [^ ]* yang segera diikuti oleh satu atau lebih spasi " +". Bagian terakhir ditambahkan untuk mencegah potensi spasi terdepan dalam hasil.
Untuk menghapus teks sebelum spasi pertama di setiap baris, rumus ditulis dalam mode default "all matches" ( instance_num dihilangkan):
=RegExpReplace(A5, "^[^ ]* +", "")
Untuk menghapus teks sebelum spasi pertama pada baris pertama, dan membiarkan semua baris lainnya tetap utuh, perintah instance_num argumen diatur ke 1:
=RegExpReplace(A5, "^[^ ]* +", "", 1)
Regex untuk menghapus semua yang ada sebelum karakter
Cara termudah untuk menghapus semua teks sebelum karakter tertentu adalah dengan menggunakan regex seperti ini:
Pola umum : ^[^char]*char
Diterjemahkan ke dalam bahasa manusia, dikatakan: "dari awal string yang berlabuh dengan ^, cocokkan 0 atau lebih karakter kecuali char [^char]* hingga kemunculan pertama dari char .
Misalnya, untuk menghapus semua teks sebelum titik dua pertama, gunakan ekspresi reguler ini:
Pola : ^[^:]*:
Untuk menghindari spasi di depan pada hasil, tambahkan karakter spasi \s* di bagian akhir. Ini akan menghapus semua yang ada sebelum titik dua pertama dan memangkas spasi apa pun tepat setelahnya:
Pola : ^[^:]*:\s*
=RegExpReplace(A5, "^[^:]*:\s*", "")
Tip. Selain ekspresi reguler, Excel memiliki cara sendiri untuk menghapus teks berdasarkan posisi atau kecocokan. Untuk mempelajari cara menyelesaikan tugas dengan rumus asli, silakan lihat Cara menghapus teks sebelum atau sesudah karakter di Excel.
Regex untuk menghapus semuanya kecuali
Untuk menghapus semua karakter dari string kecuali yang ingin Anda simpan, gunakan kelas karakter negasi.
Misalnya, untuk menghapus semua karakter kecuali huruf kecil dan titik, regex-nya adalah:
Pola : [^a-z\.]+
Sebenarnya, kita bisa melakukannya tanpa quantifier + di sini karena fungsi kita menggantikan semua kecocokan yang ditemukan. Quantifier hanya membuatnya sedikit lebih cepat - alih-alih menangani setiap karakter individu, Anda mengganti substring.
=RegExpReplace(A5, "[^a-z\.]+", "")
Regex untuk menghapus tag html di Excel
Pertama, perlu dicatat bahwa HTML bukanlah bahasa reguler, jadi menguraikannya menggunakan ekspresi reguler bukanlah cara terbaik. Meskipun demikian, regex pasti dapat membantu menghapus tag dari sel Anda untuk membuat dataset Anda lebih bersih.
Mengingat bahwa tag html selalu ditempatkan dalam tanda kurung sudut , Anda dapat menemukannya menggunakan salah satu regex berikut.
Kelas yang dinegasikan:
Pola ]*>
Di sini, kita mencocokkan kurung sudut pembuka, diikuti oleh nol atau lebih kemunculan karakter apa pun kecuali kurung sudut penutup [^>]* hingga kurung sudut penutup terdekat.
Pencarian malas:
Pola :
Di sini, kita mencocokkan apapun dari kurung pembuka pertama hingga kurung penutup pertama. Tanda tanya memaksa .* untuk mencocokkan sesedikit mungkin karakter hingga menemukan kurung penutup.
Pola mana pun yang Anda pilih, hasilnya akan benar-benar sama.
Misalnya, untuk menghapus semua tag html dari string di A5 dan meninggalkan teks, rumusnya adalah:
=RegExpReplace(A5, "]*>", "")
Atau Anda dapat menggunakan lazy quantifier seperti yang ditunjukkan pada tangkapan layar:
Solusi ini bekerja dengan sempurna untuk teks tunggal (baris 5 - 9). Untuk beberapa teks (baris 10 - 12), hasilnya dipertanyakan - teks dari tag yang berbeda digabung menjadi satu. Apakah ini benar atau tidak? Saya khawatir, ini bukan sesuatu yang dapat dengan mudah diputuskan - semua tergantung pada pemahaman Anda tentang hasil yang diinginkan. Misalnya, di B11, hasil "A1" yang diharapkan; sementara di B10, Anda mungkin ingin"data1" dan "data2" dipisahkan dengan spasi.
Untuk menghapus tag html dan memisahkan teks yang tersisa dengan spasi, Anda dapat melanjutkan dengan cara ini:
- Ganti tag dengan spasi " ", bukan string kosong:
=RegExpReplace(A5, "]*>", " ")
- Mengurangi beberapa spasi menjadi satu karakter spasi tunggal:
=RegExpReplace(RegExpReplace(A5, "]*>", " "), " +", " ")
- Pangkas spasi di depan dan di belakang:
=TRIM(RegExpReplace(RegExpReplace(A5, "]*>", " "), " +", " "))
Hasilnya akan terlihat seperti ini:
Alat Penghapus Regex Ablebits
Jika Anda berkesempatan menggunakan Ultimate Suite untuk Excel kami, Anda mungkin sudah menemukan Alat Regex baru yang diperkenalkan dengan rilis terbaru. Keindahan fungsi Regex berbasis .NET ini adalah bahwa mereka, pertama, mendukung sintaksis ekspresi reguler berfitur lengkap yang bebas dari batasan VBA RegExp, dan kedua, tidak perlu memasukkan kode VBA apa pun di buku kerja Anda karena semua integrasi kode dilakukanoleh kami di backend.
Bagian dari pekerjaan Anda adalah untuk membangun ekspresi reguler dan menyajikannya ke fungsi :) Mari saya tunjukkan kepada Anda bagaimana melakukannya pada contoh praktis.
Cara menghapus teks dalam tanda kurung dan tanda kurung menggunakan regex
Dalam string teks yang panjang, informasi yang kurang penting sering kali diapit dalam [tanda kurung] dan (tanda kurung). Bagaimana Anda menghapus detail yang tidak relevan tersebut dengan tetap menyimpan semua data lainnya?
Sebenarnya, kita telah membuat regex yang serupa untuk menghapus tag html, yaitu teks di dalam tanda kurung siku. Jelas, metode yang sama akan bekerja untuk tanda kurung siku dan bulat juga.
Pola : (\(.*?\))
Caranya adalah dengan menggunakan lazy quantifier (*?) untuk mencocokkan substring terpendek yang mungkin. Kelompok pertama (\(.*?\)) cocok dengan apa pun dari kurung pembuka hingga kurung penutup pertama. Kelompok kedua (\[.*?\]) cocok dengan apa pun dari braket pembuka hingga braket penutup pertama. Sebuah bar vertikal
Dengan pola yang telah ditentukan, mari kita "mengumpankan" ke fungsi Regex Remove kita. Begini caranya:
- Pada Data Ablebits tab, di tab Teks kelompok, klik Alat Regex .
Untuk mendapatkan hasil sebagai formula, bukan nilai, pilih tombol Sisipkan sebagai formula kotak centang.
Untuk menghapus teks di dalam tanda kurung dari string di A2:A5, kita mengkonfigurasi pengaturan sebagai berikut:
Sebagai hasilnya, para AblebitsRegexHapus disisipkan dalam kolom baru di sebelah data asli Anda.
Fungsi ini juga bisa dimasukkan secara langsung dalam sel melalui standar Fungsi Sisipkan kotak dialog, di mana ia dikategorikan di bawah AblebitsUDFs .
Sebagai AblebitsRegexHapus dirancang untuk menghapus teks, hanya membutuhkan dua argumen - string sumber dan regex. Kedua parameter tersebut dapat didefinisikan secara langsung dalam rumus atau diberikan dalam bentuk referensi sel. Jika diperlukan, fungsi kustom ini dapat digunakan bersama dengan fungsi asli apa pun.
Misalnya, untuk memangkas spasi ekstra dalam string yang dihasilkan, Anda dapat memanfaatkan fungsi TRIM sebagai pembungkus:
=TRIM(AblebitsRegexRemove(A5, $A$2))
Itulah cara menghapus string di Excel menggunakan ekspresi reguler. Saya berterima kasih telah membaca dan berharap dapat melihat Anda di blog kami minggu depan!
Unduhan yang tersedia
Hapus string menggunakan regex - contoh (file .xlsm)
Ultimate Suite - versi percobaan (file .exe)