Turinys
Šioje pamokoje apžvelgsime kelis kelių žodžių, eilučių ar atskirų simbolių radimo ir pakeitimo būdus, kad galėtumėte pasirinkti geriausiai jūsų poreikius atitinkantį būdą.
Kaip žmonės paprastai ieško "Excel" programoje? Dažniausiai naudodami funkciją "Rasti ir pakeisti", kuri puikiai tinka pavienėms reikšmėms. Bet ką daryti, jei reikia pakeisti dešimtis ar net šimtus elementų? Be abejo, niekas nenorėtų visų šių pakeitimų atlikti rankiniu būdu po vieną, o tada, pasikeitus duomenims, viską daryti iš naujo. Laimei, yra keletas veiksmingesnių būdų, kaip "Excel" programoje atlikti masinį pakeitimą, irišsamiai išnagrinėsime kiekvieną iš jų.
Kelių verčių paieška ir pakeitimas naudojant įterptinį SUBSTITUTE
Lengviausias būdas rasti ir pakeisti kelis įrašus "Excel" programoje - naudoti funkciją SUBSTITUTE.
Formulės logika labai paprasta: rašote kelias atskiras funkcijas, kad seną reikšmę pakeistumėte nauja. Tada šias funkcijas įterpiate vieną į kitą taip, kad kiekviena paskesnė SUBSTITUTE, ieškodama kitos reikšmės, naudotų ankstesnės SUBSTITUTE išvestį.
PAKAITALAS(PAKAITALAS(PAKAITALAS( tekstas , old_text1 , new_text1 ), old_text2 , new_text2 ), old_text3 , new_text3 )Tarkime, kad A2:A10 vietovių sąraše norite pakeisti sutrumpintus šalių pavadinimus (pvz. FR , JK ir JAV ) su pilnais pavadinimais.
Norėdami tai padaryti, įveskite senąsias reikšmes į D2:D4, o naująsias - į E2:E4, kaip parodyta toliau pateiktoje ekrano kopijoje. Tada į B2 įrašykite toliau pateiktą formulę ir paspauskite Enter:
=SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(A2:A10, D2, E2), D3, E3), D4, E4)
...ir visus pakeitimus atliksite iš karto:
Atkreipkite dėmesį, kad pirmiau aprašytas metodas veikia tik "Excel 365 kuris palaiko dinaminius masyvus.
Iki dinaminių "Excel 2019", "Excel 2016" ir ankstesnėse versijose formulę reikia užrašyti aukščiausiai esančiam langeliui (B2) ir nukopijuoti į žemiau esančius langelius:
=SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(A2, $D$2, $E$2), $D$3, $E$3), $D$4, $E$4)
Atkreipkite dėmesį į tai, kad šiuo atveju pakaitines reikšmes užfiksuojame absoliučiomis ląstelės nuorodomis, todėl kopijuojant formulę žemyn jos nepasikeis.
Pastaba. Funkcija SUBSTITUTE yra , kai atsižvelgiama į mažąsias ir didžiąsias raides. , t. y. turėtumėte įvesti senąsias reikšmes ( old_text ) raidžių raidėmis, kaip ir pradiniuose duomenyse.
Kad ir koks paprastas šis metodas būtų, jis turi didelį trūkumą - turint dešimtis elementų, kuriuos reikia pakeisti, įterptas funkcijas tampa gana sudėtinga valdyti.
Privalumai : lengva įgyvendinti; palaikoma visose "Excel" versijose
Trūkumai : geriausia naudoti ribotam verčių skaičiui rasti / pakeisti
Kelių įrašų paieška ir pakeitimas naudojant XLOOKUP
Jei norite pakeisti visą ląstelės turinį. , o ne jos dalis, praverčia XLOOKUP funkcija.
Tarkime, A stulpelyje turite šalių sąrašą ir norite pakeisti visas santrumpas atitinkamais pilnais pavadinimais. Kaip ir ankstesniame pavyzdyje, pradėkite nuo elementų "Rasti" ir "Pakeisti" įvedimo atskiruose stulpeliuose (atitinkamai D ir E), o tada į B2 įrašykite šią formulę:
=XLOOKUP(A2, $D$2:$D$4, $E$2:$E$4, A2)
Išvertus iš "Excel" kalbos į žmonių kalbą, formulė veikia taip:
Ieškoti A2 vertės (lookup_value) D2:D4 (lookup_array) ir grąžinti atitikmenį iš E2:E4 (return_array). Jei nerandama, iš A2 ištraukti pradinę vertę.
Dukart spustelėkite užpildymo rankenėlę, kad formulė būtų nukopijuota į toliau esančias ląsteles, ir rezultatas nereikės laukti:
Kadangi XLOOKUP funkcija yra tik "Excel 365", ankstesnėse versijose pirmiau pateikta formulė neveiks. Tačiau galite lengvai imituoti tokį elgesį naudodami IFERROR arba IFNA ir VLOOKUP derinį:
=IFNA(VLOOKUP(A2, $D$2:$E$4, 2, FALSE), A2)
Pastaba. Skirtingai nei SUBSTITUTE, XLOOKUP ir VLOOKUP funkcijos yra neskiriama didžioji ir mažoji raidės , t. y. ieškoma paieškos reikšmių neatsižvelgiant į raidžių raidę. Pavyzdžiui, mūsų formulė pakeistų abi FR ir fr su Prancūzija .
Privalumai : neįprastas įprastų funkcijų naudojimas; veikia visose "Excel" versijose
Trūkumai : veikia ląstelės lygmeniu, negali pakeisti dalies ląstelės turinio
Daugkartinis pakeitimas naudojant rekursinę LAMBDA funkciją
"Microsoft 365" prenumeratoriams "Excel" suteikia specialią funkciją, kuri leidžia kurti pasirinktines funkcijas naudojant tradicinę formulių kalbą. Taip, kalbu apie LAMBDA. Šio metodo grožis tas, kad jis gali labai ilgą ir sudėtingą formulę paversti labai kompaktiška ir paprasta. Be to, jis leidžia kurti savo funkcijas, kurių nėra "Excel" programoje, o tai anksčiau buvoįmanoma tik naudojant VBA.
Išsamios informacijos apie pasirinktinių LAMBDA funkcijų kūrimą ir naudojimą rasite šiame vadovėlyje: Kaip rašyti LAMBDA funkcijas "Excel" programoje. Čia aptarsime keletą praktinių pavyzdžių.
Privalumai : rezultatas - elegantiška ir nuostabiai paprasta naudoti funkcija, nesvarbu, kiek yra pakeitimo porų.
Trūkumai : galima naudoti tik "Excel 365"; priklauso nuo konkretaus sąsiuvinio ir negali būti pakartotinai naudojamas įvairiuose sąsiuviniuose.
1 pavyzdys. Ieškoti ir pakeisti kelis žodžius / eilutes vienu metu
Norėdami vienu veiksmu pakeisti kelis žodžius ar tekstą, sukūrėme pasirinktinę LAMBDA funkciją, pavadintą MultiReplace , kuris gali būti vienos iš šių formų:
=LAMBDA(tekstas, senas, naujas, IF(senas"", MultiReplace(SUBSTITUTE(tekstas, senas, naujas), OFFSET(senas, 1, 0), OFFSET(naujas, 1, 0)), tekstas))
Arba
=LAMBDA(tekstas, senas, naujas, IF(senas="", tekstas, MultiReplace(SUBSTITUTE(tekstas, senas, naujas), OFFSET(senas, 1, 0), OFFSET(naujas, 1, 0))))
Abi yra rekursinės funkcijos, kurios iškviečia pačios save. Skirtumas tik tas, kaip nustatomas išėjimo taškas.
Pirmoje formulėje funkcija IF tikrina, ar senas sąrašas nėra tuščias (senas""). Jei TRUE, sąrašas MultiReplace Jei iškviečiama funkcija FALSE, funkcija grąžina tekstas jo dabartinę formą ir išeina.
Antroje formulėje naudojama atvirkštinė logika: jei senas yra tuščia (old=""), tada grąžinkite tekstas ir išeikite; priešingu atveju skambinkite MultiReplace .
Sudėtingiausia dalis jau atlikta! Belieka tik įvardyti MultiReplace funkciją pavadinimų tvarkyklėje, kaip parodyta toliau pateiktoje ekrano nuotraukoje. Išsamios rekomendacijos pateikiamos skyriuje Kaip pavadinti LAMBDA funkciją.
Gavę funkcijos pavadinimą, galite ją naudoti kaip ir bet kurią kitą integruotą funkciją.
Nepriklausomai nuo to, kurį iš šių dviejų formulės variantų pasirinksite, galutinio vartotojo požiūriu sintaksė yra paprasta:
MultiReplace(tekstas, senas, naujas)Kur:
- Tekstas - pirminiai duomenys
- Senasis - rasti vertes
- Naujas - vertybes, kurias reikia pakeisti
Tęsdami ankstesnį pavyzdį, pakeiskime ne tik šalies, bet ir valstybės santrumpas. Šiuo tikslu įveskite santrumpas ( senas vertės) D stulpelyje, prasidedančiame D2, ir pilni pavadinimai ( naujas vertės) E stulpelyje, prasidedančiame E2.
B2 langelyje įveskite funkciją MultiReplace:
=MultiReplace(A2:A10, D2, E2)
Paspauskite Enter ir mėgaukitės rezultatais :)
Kaip veikia ši formulė
Norint suprasti šią formulę, reikia suprasti rekursiją. Tai gali skambėti sudėtingai, tačiau principas yra gana paprastas. Kiekvieną kartą rekursinė funkcija išsprendžia vieną mažą didesnės problemos atvejį. MultiReplace funkcija cikliškai peržiūri senąsias ir naująsias reikšmes ir kiekvienoje ciklo dalyje atlieka vieną pakeitimą:
MultiReplace (SUBSTITUTE(tekstas, senas, naujas), OFFSET(senas, 1, 0), OFFSET(naujas, 1, 0))
Kaip ir įterptinių SUBSTITUTE funkcijų atveju, ankstesnės SUBSTITUTE funkcijos rezultatas tampa tekstas parametras kitam SUBSTITUTE. Kitaip tariant, kiekvieną kartą po to iškvietus MultiReplace , funkcija SUBSTITUTE apdoroja ne pradinę teksto eilutę, o ankstesnio iškvietimo rezultatą.
Norėdami tvarkyti visus senas sąrašą, pradedame nuo viršutinio langelio ir naudodami funkciją OFFSET, kiekvieną kartą sąveikaudami perkeliame 1 eilutę žemyn:
OFFSET(old, 1, 0)
Tas pats daroma ir su naujas sąrašas:
OFFSET(new, 1, 0)
Svarbiausia yra pateikti išvykimo vieta kad rekursiniai skambučiai nebūtų tęsiami amžinai. Tai daroma naudojant funkciją IF - jei senas langelis tuščias, funkcija grąžina tekstas jo dabartinę formą ir išeina:
=LAMBDA(tekstas, senas, naujas, IF(senas="", tekstas, MultiReplace(...)))
arba
=LAMBDA(tekstas, senas, naujas, IF(senas"", MultiReplace(...), tekstas))
2 pavyzdys. Keisti kelis simbolius "Excel" programoje
Iš esmės MultiReplace ankstesniame pavyzdyje aptarta funkcija gali apdoroti ir atskirus simbolius, jei kiekvienas senas ir naujas simbolis įrašomas į atskirą langelį, kaip ir sutrumpinti bei pilni vardai pirmiau pateiktose ekrano nuotraukose.
Jei norite įvesti senuosius simbolius vienoje ląstelėje, o naujuosius simbolius - kitoje ląstelėje arba juos įvesti tiesiai į formulę, galite sukurti kitą pasirinktinę funkciją, pavadintą ReplaceChars naudodami vieną iš šių formulių:
=LAMBDA(tekstas, old_chars, new_chars, IF(old_chars"", ReplaceChars(SUBSTITUTE(tekstas, LEFT(old_chars), LEFT(new_chars)), RIGHT(old_chars, LEN(old_chars)-1), RIGHT(new_chars, LEN(new_chars)-1)), tekstas)))
Arba
=LAMBDA(tekstas, old_chars, new_chars, IF(old_chars="", tekstas, ReplaceChars(SUBSTITUTE(tekstas, LEFT(old_chars), LEFT(new_chars)), RIGHT(old_chars, LEN(old_chars)-1), RIGHT(new_chars, LEN(new_chars)-1))))
Nepamirškite pavadinti naujos "Lambda" funkcijos pavadinimo "Name Manager", kaip įprasta:
Jūsų naujoji pasirinktinė funkcija paruošta naudoti:
ReplaceChars(tekstas, old_chars, new_chars)Kur:
- Tekstas - originalios eilutės
- Senasis - ieškomi simboliai
- Naujas - simbolius, kuriuos reikia pakeisti
Norėdami išbandyti šią funkciją, atlikime tai, kas dažnai atliekama importuotiems duomenims, - pakeiskime išmaniąsias kabutes ir išmaniuosius apostrofus paprastomis kabutėmis ir apostrofais.
Pirmiausia į D2 langelį įvedame išmaniąsias kabutes ir išmanųjį apostrofą, o į E2 langelį - paprastąsias kabutes ir paprastąjį apostrofą, dėl geresnio įskaitomumo simbolius atskiriant tarpais. (Kadangi abiejuose langeliuose naudojame tą patį skyrybos ženklą, tai neturės jokios įtakos rezultatui - "Excel" tiesiog pakeis tarpą tarpais.)
Po to šią formulę įrašome į B2:
=ReplaceChars(A2:A4, D2, E2)
Ir gavome būtent tokius rezultatus, kokių ieškojome:
Taip pat galima simbolius įrašyti tiesiai į formulę. Mūsų atveju tereikia nepamiršti "dubliuoti" kabučių, pvz:
=ReplaceChars(A2:A4, "" " '", """ "" "" '")
Kaip veikia ši formulė
Svetainė ReplaceChars funkcija cikliškai pereina per old_chars ir new_chars eilutes ir pakeičia po vieną simbolį, pradedant nuo pirmojo simbolio iš kairės. Šią dalį atlieka funkcija SUBSTITUTE:
SUBSTITUTE(tekstas, LEFT(seni_žodžiai), LEFT(nauji_žodžiai))
Po kiekvienos iteracijos funkcija RIGHT iš abiejų simbolių kairėje pusėje pašalina po vieną simbolį. old_chars ir new_chars eilutes, kad LEFT galėtų paimti kitą simbolių porą ir ją pakeisti:
ReplaceChars(SUBSTITUTE(text, LEFT(old_chars), LEFT(new_chars)), RIGHT(old_chars, LEN(old_chars)-1), RIGHT(new_chars, LEN(new_chars)-1))
Prieš kiekvieną rekursinį iškvietimą funkcija IF įvertina old_chars Jei eilutė nėra tuščia, funkcija iškviečia pati save. Kai tik pakeičiamas paskutinis simbolis, iteracijos procesas baigiamas, formulė grįžta tekstas jo dabartinę formą ir išeina.
Pastaba. Kadangi mūsų pagrindinėse formulėse naudojama SUBSTITUTE funkcija yra , kai atsižvelgiama į mažąsias ir didžiąsias raides. , abi lambdos ( MultiReplace ir ReplaceChars ) didžiosios ir mažosios raidės laikomos skirtingais ženklais.
Masinis radimas ir pakeitimas naudojant UDF
Jei "Excel" programoje nėra funkcijos LAMBDA, naudodami VBA galite parašyti vartotojo apibrėžtą daugkartinio pakeitimo funkciją tradiciniu būdu.
Siekiant atskirti UDF nuo LAMBDA apibrėžto MultiReplace funkciją pavadinsime kitaip, pvz. MassReplace . Funkcijos kodas yra toks:
Funkcija MassReplace(InputRng As Range, FindRng As Range, ReplaceRng As Range) As Variant () Dim arRes() As Variant 'masyvas rezultatams saugoti Dim arSearchReplace(), sTmp As String 'masyvas, kuriame saugomos radimo/keitimo poros, laikina eilutė Dim iFindCurRow, cntFindRows As Long 'SearchReplace masyvo dabartinės eilutės indeksas, eilučių skaičius Dim iInputCurRow, iInputCurCol, cntInputRows,cntInputCols As Long 'einamosios eilutės indeksas šaltinio intervale, einamojo stulpelio indeksas šaltinio intervale, eilučių skaičius, stulpelių skaičius 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 To 2) 'rengiame radimo/keitimo porų masyvą ForiFindCurRow = 1 To cntFindRows arSearchReplace(iFindCurRow, 1) = FindRng.Cells(iFindCurRow, 1).Value arSearchReplace(iFindCurRow, 2) = ReplaceRng.Cells(iFindCurRow, 1).Value Next 'Paieška ir pakeitimas pradiniame diapazone For iInputCurRow = 1 To cntInputRows For iInputCurCol = 1 To cntInputCols sTmp = InputRng.Cells(iInputCurRow, iInputCurCol).Value 'Pakeičia visas radimo/keitimo poras kiekviename langelyjeFor iFindCurRow = 1 To cntFindRows sTmp = Replace(sTmp, arSearchReplace(iFindCurRow, 1), arSearchReplace(iFindCurRow, 2)) Next arRes(iInputCurRow, iInputCurCol) = sTmp Next Next Next MassReplace = arRes End FunctionKaip ir LAMBDA apibrėžtos funkcijos, UDF yra visos darbo knygos Tai reiškia, kad MassReplace funkcija veiks tik tame sąsiuvinyje, į kurį įterpėte kodą. Jei nežinote, kaip tai padaryti teisingai, atlikite veiksmus, aprašytus skyrelyje Kaip įterpti VBA kodą "Excel".
Kai kodas bus įtrauktas į sąsiuvinį, funkcija bus rodoma formulės intellisense - tik funkcijos pavadinimas, bet ne argumentai! Nors, manau, kad nėra didelė problema prisiminti sintaksę:
MassReplace(input_range, find_range, replace_range)Kur:
- Input_range - šaltinio diapazoną, kuriame norite pakeisti reikšmes.
- Find_range - simbolių, eilučių arba žodžių, kurių reikia ieškoti.
- Pakeisti_apimtis - simbolius, eilutes arba žodžius, kuriuos norite pakeisti.
Dėl dinaminių masyvų palaikymo "Excel 365" ši formulė veikia kaip įprasta formulė, kurią reikia įvesti tik viršutiniame lange (B2):
=MassReplace(A2:A10, D2:D4, E2:E4)
Iki dinaminės "Excel" programoje tai veikia kaip senojo stiliaus CSE masyvo formulė: pasirenkate visą šaltinio diapazoną (B2:B10), įvedate formulę ir vienu metu spaudžiate klavišus Ctrl + Shift + Enter, kad ją užbaigtumėte.
Privalumai : tinkama alternatyva pasirinktinei LAMBDA funkcijai "Excel 2019", "Excel 2016" ir ankstesnėse versijose
Trūkumai : sąsiuvinis turi būti išsaugotas kaip .xlsm failas su makrokomandomis
Masinis pakeitimas "Excel" programoje naudojant VBA makrokomandą
Jei mėgstate automatizuoti įprastas užduotis naudodami makrokomandas, galite naudoti toliau pateiktą VBA kodą, kad rastumėte ir pakeistumėte kelias reikšmes diapazone.
Sub BulkReplace() Dim Rng As Range, SourceRng As Range, ReplaceRng As Range On Error Resume Next Set SourceRng = Application.InputBox ("Source data:" , "Bulk Replace" , Application.Selection.Address, Type :=8) Err.Clear If Not SourceRng Is Nothing Then Set ReplaceRng = Application.InputBox ("Replace range:" , "Bulk Replace" , Type :=8) Err.Clear If Not ReplaceRng Is Nothing ThenApplication.ScreenUpdating = False For Each Rng In ReplaceRng.Columns(1).Cells SourceRng.Replace what:=Rng.Value, replacement:=Rng.Offset(0, 1).Value Next Application.ScreenUpdating = True End If End If End SubNorėdami iš karto pasinaudoti makrokomandos makrokomanda, galite atsisiųsti mūsų pavyzdinę darbo knygą su kodu. Arba galite įterpti kodą į savo darbo knygą.
Kaip naudoti makrokomandą
Prieš paleisdami makrokomandą, į du gretimus stulpelius įveskite seną ir naują reikšmes, kaip parodyta toliau pateiktame paveikslėlyje (C2:D4).
Tada pasirinkite šaltinio duomenis, paspauskite Alt + F8 , pasirinkite BulkReplace makrokomandą ir spustelėkite Paleisti .
Kaip šaltinis įniršis yra iš anksto pasirinktas, tiesiog patikrinkite nuorodą ir spustelėkite OK:
Po to pasirinkite pakeisti diapazoną ir spustelėkite Gerai:
Atlikta!
Privalumai : vieną kartą nustatyti, bet kada naudoti pakartotinai
Trūkumai : makrokomandą reikia paleisti kiekvieną kartą keičiant duomenis
Kelių paieškos ir pakeitimo įrankiu "Excel" su "Substring" įrankiu
Pačiame pirmajame pavyzdyje minėjau, kad įterptasis SUBSTITUTE yra paprasčiausias būdas pakeisti kelias reikšmes "Excel" programoje. Pripažįstu, kad klydau. Su mūsų "Ultimate Suite" viskas dar paprasčiau!
Norėdami atlikti masinį pakeitimą savo darbalapyje, eikite į Ablebitų duomenys skirtuką ir spustelėkite Įrankiai, susiję su nuosekliosiomis eilutėmis > Pakeisti posričių eilutes .
Svetainė Pakeisti posričių eilutes bus rodomas dialogo langas, kuriame bus prašoma apibrėžti Šaltinis diapazonas ir Substringai diapazonas.
Pasirinkę du intervalus, spustelėkite Pakeisti mygtuką ir raskite rezultatus naujame stulpelyje, įterptame į dešinę nuo pradinių duomenų. Taip, tai taip paprasta!
Patarimas. Prieš spustelėdami Pakeisti , reikia atsižvelgti į vieną svarbų dalyką - į Taisyklės langelį Būtinai jį pažymėkite, jei norite didžiąsias ir mažąsias raides tvarkyti kaip skirtingus simbolius. Šiame pavyzdyje pažymime šią parinktį, nes norime pakeisti tik didžiąsias raides, o kituose žodžiuose esančias posričių eilutes, pavyzdžiui, "fr", "uk" arba "ak", palikti nepakeistas.
Jei jums įdomu sužinoti, kokias kitas stygų operacijas galima atlikti su eilutėmis, peržiūrėkite kitus "Substring" įrankius, įtrauktus į mūsų "Ultimate Suite" rinkinį. Arba dar geriau - atsisiųskite toliau pateiktą bandomąją versiją ir išbandykite ją!
Štai kaip "Excel" programoje vienu metu rasti ir pakeisti kelis žodžius ir simbolius. Dėkoju, kad perskaitėte, ir tikiuosi, kad kitą savaitę susitiksime mūsų tinklaraštyje!
Galimi atsisiuntimai
Kelių radimas ir pakeitimas "Excel" (.xlsm faile)
"Ultimate Suite" 14 dienų pilnai veikianti versija (.exe failas)