Isi kandungan
Dalam tutorial ini, kami akan melihat beberapa cara untuk mencari dan menggantikan berbilang perkataan, rentetan atau aksara individu, supaya anda boleh memilih yang paling sesuai dengan keperluan anda.
Bagaimanakah orang biasanya mencari dalam Excel? Selalunya, dengan menggunakan Cari & Gantikan ciri, yang berfungsi dengan baik untuk nilai tunggal. Tetapi bagaimana jika anda mempunyai puluhan atau bahkan ratusan item untuk diganti? Sudah tentu, tiada siapa yang mahu membuat semua penggantian itu secara manual satu demi satu, dan kemudian melakukannya sekali lagi apabila data berubah. Nasib baik, terdapat beberapa kaedah yang lebih berkesan untuk melakukan penggantian besar-besaran dalam Excel dan kami akan menyiasat setiap satu daripadanya secara terperinci.
Cari dan gantikan berbilang nilai dengan PENGGANTI bersarang
Cara paling mudah untuk mencari dan menggantikan berbilang entri dalam Excel ialah dengan menggunakan fungsi SUBSTITUTE.
Logik formula adalah sangat mudah: anda menulis beberapa fungsi individu untuk menggantikan nilai lama dengan yang baharu . Dan kemudian, anda menyarangkan fungsi tersebut antara satu sama lain, supaya setiap PENGGANTI berikutnya menggunakan output PENGGANTI sebelumnya untuk mencari nilai seterusnya.
GANTI(GANTIAN(GANTIAN( teks, old_text1, new_text1), old_text2, new_text2), old_text3, new_text3)Dalam senarai lokasi dalam A2:A10, katakan anda ingin menggantikan nama negara yang disingkat (seperti FR , UK dan AS ) dengan penuhFungsi MassReplace akan berfungsi hanya dalam buku kerja di mana anda telah memasukkan kod. Jika anda tidak pasti cara melakukannya dengan betul, sila ikuti langkah yang diterangkan dalam Cara memasukkan kod VBA dalam Excel.
Setelah kod itu ditambahkan pada buku kerja anda, fungsi itu akan muncul dalam formula intellisense - sahaja nama fungsi, bukan hujah! Walaupun, saya percaya bukan masalah besar untuk mengingati sintaks:
MassReplace(input_range, find_range, replace_range)Where:
- Input_range - julat sumber di mana anda mahu menggantikan nilai.
- Cari_julat - aksara, rentetan atau perkataan untuk dicari.
- Ganti_julat - aksara, rentetan, atau perkataan untuk diganti.
Dalam Excel 365, disebabkan sokongan untuk tatasusunan dinamik, ini berfungsi sebagai formula biasa, yang hanya perlu dimasukkan dalam sel atas (B2):
=MassReplace(A2:A10, D2:D4, E2:E4)
Dalam Excel pra-dinamik, ini berfungsi sebagai formula tatasusunan CSE gaya lama: anda memilih keseluruhan julat sumber (B2:B10), taip formula dan tekan kekunci Ctrl + Shift + Enter serentak untuk melengkapkannya.
Kelebihan : alternatif yang baik kepada fungsi LAMBDA tersuai dalam Excel 2019 , Excel 2016 dan versi terdahulu
Kelemahan : buku kerja mesti disimpan sebagai fail .xlsm yang didayakan makro
Ganti pukal dalam Excel dengan makro VBA
Jika anda suka auto mengawan tugas biasa dengan makro, kemudian andaboleh menggunakan kod VBA berikut untuk mencari dan menggantikan berbilang nilai dalam julat.
Sub BulkReplace() Dim Rng As Range, SourceRng As Range, ReplaceRng As Range On Error Resume Next Set SourceRng = Application.InputBox( "Source data: " , "Ganti Pukal" , Application.Selection.Adress, Type :=8) Err.Clear If Not SourceRng Is Nothing Then Set ReplaceRng = Application.InputBox( "Replace range:" , "Pukal Ganti" , Type :=8) Err.Clear If Not ReplaceRng Is Nothing Then Application.ScreenUpdating = Palsu Untuk Setiap Rng Dalam ReplaceRng.Columns(1).Cells SourceRng.Replace what:=Rng.Value, replacement:=Rng.Offset(0, 1).Value Next Application.ScreenUpdating = True End If End If End SubUntuk menggunakan makro dengan segera, anda boleh memuat turun contoh buku kerja kami yang mengandungi kod. Atau anda boleh memasukkan kod dalam buku kerja anda sendiri.
Cara menggunakan makro
Sebelum menjalankan makro, taip nilai lama dan baharu ke dalam dua lajur bersebelahan seperti yang ditunjukkan dalam imej di bawah ( C2:D4).
Kemudian, pilih data sumber anda, tekan Alt + F8 , pilih makro BulkReplace dan klik Jalankan .
Memandangkan kemarahan sumber diprapilih, cuma sahkan rujukan dan klik OK:
Selepas itu, pilih julat ganti dan klik OK:
Selesai!
Kelebihan : persediaan sekali, gunakan semula pada bila-bila masa
Kelemahan : makro perlu dijalankan dengan setiap datatukar
Pelbagai cari dan gantikan dalam Excel dengan alat Subrentetan
Dalam contoh pertama, saya menyebut bahawa SUBSTITUTE bersarang ialah cara paling mudah untuk menggantikan berbilang nilai dalam Excel. Saya mengakui bahawa saya salah. Suite Ultimate kami menjadikan perkara lebih mudah!
Untuk melakukan penggantian besar-besaran dalam lembaran kerja anda, pergi ke tab Data Ablebits dan klik Alat Substring > Gantikan Subrentetan .
Kotak dialog Ganti Subrentetan akan muncul meminta anda mentakrifkan julat Sumber dan Subrentetan julat.
Dengan dua julat dipilih, klik butang Ganti dan cari keputusan dalam lajur baharu yang disisipkan di sebelah kanan daripada data asal. Ya, semudah itu!
Petua. Sebelum mengklik Ganti , terdapat satu perkara penting untuk anda pertimbangkan - kotak Sensitif huruf besar-kecil . Pastikan anda memilihnya jika anda ingin mengendalikan huruf besar dan huruf kecil sebagai aksara yang berbeza. Dalam contoh ini, kami menanda pilihan ini kerana kami hanya mahu menggantikan rentetan huruf besar dan membiarkan subrentetan seperti "fr", "uk", atau "ak" dalam perkataan lain utuh.
Jika anda ingin tahu apakah operasi pukal lain yang boleh dilakukan pada rentetan, lihat Alat Substring lain yang disertakan dengan Suite Ultimate kami. Atau lebih baik lagi, muat turun versi penilaian di bawah dan cuba!
Begitulah cara mencari dan menggantikanberbilang perkataan dan aksara sekali gus dalam Excel. Saya berterima kasih kerana membaca dan berharap dapat berjumpa anda di blog kami minggu hadapan!
Muat turun yang tersedia
Pelbagai cari dan ganti dalam Excel (.xlsm file)
Ultimate Suite 14 -hari versi berfungsi sepenuhnya (fail .exe)
nama.Untuk melakukannya, masukkan nilai lama dalam D2:D4 dan nilai baharu dalam E2:E4 seperti yang ditunjukkan dalam tangkapan skrin di bawah. Dan kemudian, letakkan formula di bawah dalam B2 dan tekan Enter:
=SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(A2:A10, D2, E2), D3, E3), D4, E4)
…dan anda akan mempunyai semua penggantian dilakukan serentak:
Sila ambil perhatian, pendekatan di atas hanya berfungsi dalam Excel 365 yang menyokong tatasusunan dinamik.
Dalam versi pra-dinamik Excel 2019, Excel 2016 dan lebih awal, formula perlu ditulis untuk sel paling atas (B2), dan kemudian disalin ke sel di bawah:
=SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(A2, $D$2, $E$2), $D$3, $E$3), $D$4, $E$4)
Sila ambil perhatian bahawa, dalam kes ini, kami mengunci nilai gantian dengan rujukan sel mutlak, jadi mereka tidak akan beralih apabila menyalin formula ke bawah.
Nota. Fungsi SUBSTITUTE ialah sensitif huruf besar-kecil , bermakna anda harus menaip nilai lama ( teks_lama ) dalam huruf besar yang sama seperti yang dipaparkan dalam data asal.
Semudah mungkin, kaedah ini mempunyai kelemahan yang ketara - apabila anda mempunyai berpuluh-puluh item untuk diganti, fungsi bersarang menjadi agak sukar untuk diurus.
Kelebihan : mudah -untuk melaksanakan; disokong dalam semua versi Excel
Kelemahan : terbaik untuk digunakan untuk bilangan nilai carian/ganti yang terhad
Cari dan gantikan berbilang entri dengan XLOOKUP
Dalam situasi semasa anda ingin menggantikan keseluruhan kandungan sel , bukan bahagiannya, fungsi XLOOKUP berguna.
Mari kitakatakan anda mempunyai senarai negara dalam lajur A dan bertujuan untuk menggantikan semua singkatan dengan nama penuh yang sepadan. Seperti dalam contoh sebelumnya, anda mulakan dengan memasukkan item "Cari" dan "Ganti" dalam lajur berasingan (masing-masing D dan E), kemudian masukkan formula ini dalam B2:
=XLOOKUP(A2, $D$2:$D$4, $E$2:$E$4, A2)
Diterjemahkan daripada bahasa Excel ke dalam bahasa manusia, inilah yang dilakukan oleh formula:
Cari nilai A2 (lookup_value) dalam D2:D4 (lookup_array) dan kembalikan padanan daripada E2:E4 (return_array). Jika tidak ditemui, tarik nilai asal daripada A2.
Klik dua kali pemegang isian untuk mendapatkan formula disalin ke sel di bawah dan hasilnya tidak akan membuatkan anda menunggu:
Memandangkan fungsi XLOOKUP hanya tersedia dalam Excel 365, formula di atas tidak akan berfungsi dalam versi terdahulu. Walau bagaimanapun, anda boleh meniru gelagat ini dengan mudah dengan gabungan IFERROR atau IFNA dan VLOOKUP:
=IFNA(VLOOKUP(A2, $D$2:$E$4, 2, FALSE), A2)
Nota. Tidak seperti SUBSTITUTE, fungsi XLOOKUP dan VLOOKUP adalah tidak sensitif huruf besar-kecil , bermakna mereka mencari nilai carian tanpa menghiraukan huruf besar. Sebagai contoh, formula kami akan menggantikan kedua-dua FR dan fr dengan Perancis .
Kelebihan : penggunaan luar biasa fungsi biasa; berfungsi dalam semua versi Excel
Kelemahan : berfungsi pada peringkat sel, tidak boleh menggantikan sebahagian daripada kandungan sel
Berbilang ganti menggunakan fungsi LAMBDA rekursif
Untuk Microsoft365 pelanggan, Excel menyediakan fungsi khas yang membolehkan mencipta fungsi tersuai menggunakan bahasa formula tradisional. Ya, saya bercakap tentang LAMBDA. Keindahan kaedah ini ialah ia boleh menukar formula yang sangat panjang dan kompleks kepada formula yang sangat padat dan mudah. Selain itu, ia membolehkan anda mencipta fungsi anda sendiri yang tidak wujud dalam Excel, sesuatu yang sebelum ini mungkin hanya dengan VBA.
Untuk mendapatkan maklumat terperinci tentang mencipta dan menggunakan fungsi LAMBDA tersuai, sila lihat tutorial ini: Bagaimana untuk menulis fungsi LAMBDA dalam Excel. Di sini, kita akan membincangkan beberapa contoh praktikal.
Kelebihan : hasilnya ialah fungsi yang elegan dan sangat mudah untuk digunakan, tidak kira bilangan pasangan gantian
Kelemahan : tersedia hanya dalam Excel 365; khusus buku kerja dan tidak boleh digunakan semula merentas buku kerja yang berbeza
Contoh 1. Cari dan gantikan berbilang perkataan / rentetan sekaligus
Untuk menggantikan berbilang perkataan atau teks sekali gus, kami telah membuat tersuai Fungsi LAMBDA, dinamakan MultiReplace , yang boleh mengambil salah satu daripada bentuk ini:
=LAMBDA(text, old, new, IF(old"", MultiReplace(SUBSTITUTE(text, old, new), OFFSET(old, 1, 0), OFFSET(new, 1, 0)), text))
Atau
=LAMBDA(text, old, new, IF(old="", text, MultiReplace(SUBSTITUTE(text, old, new), OFFSET(old, 1, 0), OFFSET(new, 1, 0))))
Kedua-duanya adalah rekursif fungsi yang memanggil diri mereka sendiri. Perbezaannya hanya dalam cara titik keluar ditubuhkan.
Dalam formula pertama, fungsi IF menyemak sama ada senarai lama tidak kosong (lama""). Jika BENAR, fungsi MultiReplace dipanggil. Jika SALAH, fungsinyamengembalikan teks bentuk semasanya dan keluar.
Formula kedua menggunakan logik terbalik: jika lama kosong (lama=""), kemudian kembalikan teks dan keluar; jika tidak, panggil MultiReplace .
Bahagian paling rumit telah dicapai! Apa yang tinggal untuk anda lakukan ialah menamakan fungsi MultiReplace dalam Pengurus Nama seperti yang ditunjukkan dalam tangkapan skrin di bawah. Untuk garis panduan terperinci, sila lihat Cara menamakan fungsi LAMBDA.
Setelah fungsi mendapat nama, anda boleh menggunakannya sama seperti fungsi terbina lain.
Mana-mana daripada dua variasi formula yang anda pilih, dari perspektif pengguna akhir, sintaksnya semudah ini:
MultiReplace(teks, lama, baharu)Di mana:
- Teks - data sumber
- Lama - nilai untuk dicari
- Baharu - nilai untuk diganti dengan
Mengambil contoh sebelumnya sedikit lagi, mari kita menggantikan bukan sahaja singkatan negara tetapi juga singkatan negeri. Untuk ini, taipkan singkatan ( nilai lama) dalam lajur D bermula dalam D2 dan nama penuh ( nilai baharu) dalam lajur E bermula dalam E2.
Dalam B2, masukkan fungsi MultiReplace:
=MultiReplace(A2:A10, D2, E2)
Tekan Enter dan nikmati hasilnya :)
Cara formula ini berfungsi
Petunjuk untuk memahami formula ialah memahami rekursi. Ini mungkin terdengar rumit, tetapi prinsipnya agak mudah. Dengan setiaplelaran, fungsi rekursif menyelesaikan satu contoh kecil masalah yang lebih besar. Dalam kes kami, fungsi MultiReplace menggelung melalui nilai lama dan baharu dan, dengan setiap gelung, melakukan satu penggantian:
MultiReplace (SUBSTITUTE(text, old, new), OFFSET(old, 1, 0), OFFSET(new, 1, 0))
Seperti fungsi SUBSTITUTE bersarang, hasil SUBSTITUTE sebelumnya menjadi parameter text untuk SUBSTITUTE seterusnya. Dalam erti kata lain, pada setiap panggilan berikutnya MultiReplace , fungsi SUBSTITUTE bukan memproses rentetan teks asal, tetapi output panggilan sebelumnya.
Untuk mengendalikan semua item pada <1 senarai>lama , kita mulakan dengan sel paling atas, dan gunakan fungsi OFFSET untuk mengalihkan 1 baris ke bawah dengan setiap interaksi:
OFFSET(old, 1, 0)
Perkara yang sama dilakukan untuk senarai baharu:
OFFSET(new, 1, 0)
Perkara yang penting ialah menyediakan titik keluar untuk mengelakkan panggilan rekursif daripada diteruskan selama-lamanya. Ia dilakukan dengan bantuan fungsi IF - jika sel lama kosong, fungsi itu mengembalikan teks bentuk sedia ada dan keluar:
=LAMBDA(text, old, new, IF(old="", text, MultiReplace(…)))
atau
=LAMBDA(text, old, new, IF(old"", MultiReplace(…), text))
Contoh 2. Gantikan berbilang aksara dalam Excel
Secara prinsipnya, fungsi MultiReplace yang dibincangkan dalam contoh sebelumnya boleh mengendalikan aksara individu juga, dengan syarat setiap aksara lama dan baharu dimasukkan dalam sel yang berasingan, sama seperti nama ringkas dan penuh dalam tangkapan skrin di atas.
Jika anda lebih suka memasukkan aksara lamaaksara dalam satu sel dan aksara baharu dalam sel lain, atau taipkannya terus dalam formula, kemudian anda boleh mencipta satu lagi fungsi tersuai, bernama ReplaceChars , dengan menggunakan salah satu formula ini:
=LAMBDA(text, old_chars, new_chars, IF(old_chars"", ReplaceChars(SUBSTITUTE(text, LEFT(old_chars), LEFT(new_chars)), RIGHT(old_chars, LEN(old_chars)-1), RIGHT(new_chars, LEN(new_chars)-1)), text))
Atau
=LAMBDA(text, old_chars, new_chars, IF(old_chars="", text, ReplaceChars(SUBSTITUTE(text, LEFT(old_chars), LEFT(new_chars)), RIGHT(old_chars, LEN(old_chars)-1), RIGHT(new_chars, LEN(new_chars)-1))))
Ingat untuk menamakan fungsi Lambda baharu anda dalam Pengurus Nama seperti biasa:
Dan fungsi tersuai baharu anda sedia untuk digunakan:
ReplaceChars(text, old_chars, new_chars)Di mana:
- Teks - rentetan asal
- Lama - aksara untuk dicari
- Baharu - aksara untuk digantikan dengan
Untuk memberikannya ujian medan, mari kita lakukan sesuatu yang sering dilakukan pada data yang diimport - gantikan petikan pintar dan apostrof pintar dengan petikan lurus dan apostrof lurus.
Pertama, kami memasukkan petikan pintar dan apostrof pintar dalam D2, petikan lurus dan apostrof lurus dalam E2 , memisahkan aksara dengan ruang untuk kebolehbacaan yang lebih baik. (Memandangkan kita menggunakan pembatas yang sama dalam kedua-dua sel, ia tidak akan memberi kesan pada hasil - Excel hanya akan menggantikan ruang dengan ruang.)
Selepas itu, kami memasukkan formula ini dalam B2:
=ReplaceChars(A2:A4, D2, E2)
Dan dapatkan hasil yang kami cari dengan tepat:
Anda juga boleh menaip aksara secara langsung dalam formula. Dalam kes kami, cuma ingat untuk "menduakan" petikan lurus seperti ini:
=ReplaceChars(A2:A4, "“ ” ’", """ "" '")
Cara formula ini berfungsi
The ReplaceChars fungsi kitaran melalui rentetan old_chars dan new_chars dan membuat satu penggantian pada satu masa bermula dari aksara pertama di sebelah kiri. Bahagian ini dilakukan oleh fungsi SUBSTITUTE:
SUBSTITUTE(text, LEFT(old_chars), LEFT(new_chars))
Dengan setiap lelaran, fungsi RIGHT menanggalkan satu aksara dari sebelah kiri kedua-dua old_chars dan new_chars rentetan, supaya LEFT boleh mengambil pasangan aksara seterusnya untuk penggantian:
ReplaceChars(SUBSTITUTE(text, LEFT(old_chars), LEFT(new_chars)), RIGHT(old_chars, LEN(old_chars)-1), RIGHT(new_chars, LEN(new_chars)-1))
Sebelum setiap panggilan rekursif, fungsi IF menilai rentetan old_chars . Jika ia tidak kosong, fungsi itu memanggil dirinya sendiri. Sebaik sahaja aksara terakhir telah diganti, proses lelaran selesai, formula mengembalikan teks bentuk sedia ada dan keluar.
Nota. Oleh kerana fungsi SUBSTITUTE yang digunakan dalam formula teras kami adalah sensitif huruf besar-kecil , kedua-dua Lambdas ( MultiReplace dan ReplaceChars ) menganggap huruf besar dan huruf kecil sebagai aksara yang berbeza.
Pencarian dan ganti secara besar-besaran dengan UDF
Sekiranya fungsi LAMBDA tidak tersedia dalam Excel anda, anda boleh menulis fungsi yang ditakrifkan pengguna untuk penggantian berbilang dengan cara tradisional menggunakan VBA.
Untuk membezakan UDF daripada fungsi MultiReplace yang ditakrifkan LAMBDA, kami akan menamakannya secara berbeza, katakan MassReplace . Kod fungsi adalah seperti berikut:
Function MassReplace(InputRng As Range, FindRng As Range, ReplaceRng As Range) As Variant () DimarRes() Sebagai Variant 'array untuk menyimpan hasil Dim arSearchReplace(), sTmp As String 'array di mana untuk menyimpan cari/ganti pasangan, rentetan sementara Dim iFindCurRow, cntFindRows As Long 'indeks baris semasa tatasusunan SearchReplace, kira daripada baris Malapkan iInputCurRow, iInputCurCol, cntInputRows, cntInputCols Selagi 'indeks baris semasa dalam julat sumber, indeks lajur semasa dalam julat sumber, kiraan baris, kiraan lajur cntInputRows = InputRng.Rows.Count cntInputCols = InputRng .Columns.Count cntFindRows = FindRng.Rows.Count ReDim arRes(1 To cntInputRows, 1 To cntInputCols) ReDim arSearchReplace(1 To cntFindRows, 1 Hingga 2) 'menyediakan tatasusunan cari/ganti pasangan Untuk iFindCurntFindRow = 1 iFindCurRow, 1) = FindRng.Cells(iFindCurRow, 1).Nilai arSearchReplace(iFindCurRow, 2) = ReplaceRng.Cells(iFindCurRow, 1).Value Next 'Mencari dan menggantikan dalam julat sumber Untuk iInputCurRow = 1CurRow = 1CurRow 1 Kepada cntInputCols sTm p = InputRng.Cells(iInputCurRow, iInputCurCol).Value 'Menggantikan semua cari/ganti pasangan dalam setiap sel Untuk iFindCurRow = 1 Untuk cntFindRows sTmp = Ganti(sTmp, arSearchReplace(iFindCurRow, 1), arSearchReplace(iFindCurRow, 1), arSearchReplace(iRend)Seterusnya (iInputCurRow, iInputCurCol) = sTmp Next Next MassReplace = arRes End FunctionSeperti fungsi yang ditakrifkan LAMBDA, UDF adalah di seluruh buku kerja . Itu bermakna