Sisällysluettelo
Tässä ohjeessa tarkastelemme useita tapoja etsiä ja korvata useita sanoja, merkkijonoja tai yksittäisiä merkkejä, jotta voit valita tarpeisiisi parhaiten sopivan tavan.
Miten ihmiset yleensä etsivät Excelissä? Useimmiten käyttämällä Etsi & korvaa -toimintoa, joka toimii hyvin yksittäisille arvoille. Mutta entä jos sinulla on kymmeniä tai jopa satoja korvattavia kohteita? Kukaan ei varmasti halua tehdä kaikkia näitä korvauksia manuaalisesti yksi kerrallaan ja sitten tehdä sitä uudelleen, kun tiedot muuttuvat. Onneksi on olemassa muutamia tehokkaampia menetelmiä massakorvausten tekemiseen Excelissä, jaaiomme tutkia kutakin niistä yksityiskohtaisesti.
Etsi ja korvaa useita arvoja sisäkkäisillä SUBSTITUTE-olioilla.
Helpoin tapa löytää ja korvata useita merkintöjä Excelissä on SUBSTITUTE-toiminnon käyttäminen.
Kaavan logiikka on hyvin yksinkertainen: kirjoitat muutamia yksittäisiä funktioita, joilla korvataan vanha arvo uudella. Sitten nämä funktiot liitetään toisiinsa niin, että jokainen seuraava SUBSTITUTE käyttää edellisen SUBSTITUTE:n tulosta seuraavan arvon etsimiseen.
KORVAAVA(KORVAAVA(KORVAAVA( teksti , vanha_teksti1 , uusi_teksti1 ), vanha_teksti2 , new_text2 ), old_text3 , new_text3 )Oletetaan, että haluat korvata A2:A10-luettelossa olevien paikkojen lyhennetyt maan nimet (esimerkiksi FR , UK ja YHDYSVALLAT ) täydellisillä nimillä.
Kirjoita vanhat arvot kohtaan D2:D4 ja uudet arvot kohtaan E2:E4, kuten alla olevassa kuvakaappauksessa näkyy. Kirjoita sitten alla oleva kaava kohtaan B2 ja paina Enter:
=SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(A2:A10, D2, E2), D3, E3), D4, E4)
...ja saat kaikki vaihdot tehtyä kerralla:
Huomaa, että yllä oleva lähestymistapa toimii vain Excel 365 joka tukee dynaamisia matriiseja.
Excel 2019:n, Excel 2016:n ja aikaisempien Excel-versioiden dynaamisuutta edeltävissä versioissa kaava on kirjoitettava ylimpään soluun (B2) ja kopioitava sitten alla oleviin soluihin:
=SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(A2, $D$2, $E$2), $D$3, $E$3), $D$4, $E$4)
Huomaa, että tässä tapauksessa lukitsemme korvaavat arvot absoluuttisilla soluviittauksilla, jotta ne eivät siirry, kun kaava kopioidaan alaspäin.
Huomautus: SUBSTITUTE-toiminto on case-sensitive eli sinun pitäisi kirjoittaa vanhat arvot ( old_text ) samoilla kirjaimilla kuin ne esiintyvät alkuperäisissä tiedoissa.
Niin helppoa kuin se voikin olla, tällä menetelmällä on merkittävä haittapuoli - kun korvattavia kohteita on kymmeniä, sisäkkäisiä funktioita on melko vaikea hallita.
Edut : helppo toteuttaa; tuettu kaikissa Excel-versioissa.
Haitat : paras käyttää rajoitettuun määrään find/replace-arvoja.
Etsi ja korvaa useita merkintöjä XLOOKUPilla
Tilanteessa, jossa haluat korvata koko solun sisältö , ei sen osaa, XLOOKUP-toiminto on kätevä.
Oletetaan, että sinulla on luettelo maista sarakkeessa A ja haluat korvata kaikki lyhenteet vastaavilla täydellisillä nimillä. Kuten edellisessä esimerkissä, aloitat syöttämällä "Etsi" ja "Korvaa" -kohteet erillisiin sarakkeisiin (D ja E) ja syötä sitten tämä kaava B2:een:
=XLOOKUP(A2, $D$2:$D$4, $E$2:$E$4, A2)
Excelin kielestä ihmisten kielelle käännettynä kaava toimii seuraavasti:
Etsitään A2-arvoa (lookup_value) D2:D4:stä (lookup_array) ja palautetaan vastaavuus E2:E4:stä (return_array). Jos sitä ei löydy, otetaan alkuperäinen arvo A2:sta.
Kaksoisnapsauta täyttökahvaa saadaksesi kaavan kopioitua alla oleviin soluihin, eikä tulos anna sinun odottaa:
Koska XLOOKUP-toiminto on käytettävissä vain Excel 365:ssä, yllä oleva kaava ei toimi aiemmissa versioissa. Voit kuitenkin helposti jäljitellä tätä käyttäytymistä IFERROR- tai IFNA- ja VLOOKUP-yhdistelmällä:
=IFNA(VLOOKUP(A2, $D$2:$E$4, 2, FALSE), A2)
Huomautus: Toisin kuin SUBSTITUTE, XLOOKUP- ja VLOOKUP-toiminnot ovat ei eroa isojen ja pienten kirjainten välillä , eli ne etsivät hakuarvoja ottamatta huomioon kirjainten isoja ja pieniä kirjaimia. Esimerkiksi kaavamme korvaisi sekä FR ja fr kanssa Ranska .
Edut : tavanomaisten funktioiden epätavallinen käyttö; toimii kaikissa Excel-versioissa.
Haitat : toimii solutasolla, ei voi korvata osaa solun sisällöstä.
Useita korvaa käyttämällä rekursiivista LAMBDA-funktiota
Microsoft 365:n tilaajille Excel tarjoaa erityisen toiminnon, joka mahdollistaa omien funktioiden luomisen perinteisellä kaavakielellä. Jep, puhun LAMBDA:sta. Tämän menetelmän kauneus on siinä, että se voi muuntaa hyvin pitkän ja monimutkaisen kaavan hyvin tiiviiksi ja yksinkertaiseksi. Lisäksi sen avulla voit luoda omia funktioita, joita ei ole olemassa Excelissä, mikä oli ennen kuinmahdollista vain VBA:lla.
Yksityiskohtaiset tiedot mukautettujen LAMBDA-funktioiden luomisesta ja käytöstä saat tästä opetusohjelmasta: LAMBDA-funktioiden kirjoittaminen Excelissä. Tässä käsitellään muutamia käytännön esimerkkejä.
Edut : tuloksena on tyylikäs ja hämmästyttävän helppokäyttöinen funktio riippumatta korvaavien parien määrästä.
Haitat : käytettävissä vain Excel 365:ssä; työkirjakohtainen, eikä sitä voi käyttää uudelleen eri työkirjoissa.
Esimerkki 1. Etsi ja korvaa useita sanoja/merkkijonoja kerralla.
Korvataksemme useita sanoja tai tekstiä yhdellä kertaa, olemme luoneet mukautetun LAMBDA-funktion nimeltä MultiReplace , joka voi olla jossakin seuraavista muodoista:
=LAMBDA(teksti, vanha, uusi, IF(vanha"", MultiReplace(SUBSTITUTE(teksti, vanha, uusi), OFFSET(vanha, 1, 0), OFFSET(uusi, 1, 0)), teksti)))
Tai
=LAMBDA(text, old, new, IF(old="", text, MultiReplace(SUBSTITUTE(text, old, new), OFFSET(old, 1, 0), OFFSET(new, 1, 0))))
Molemmat ovat rekursiivisia funktioita, jotka kutsuvat itseään. Ero on vain siinä, miten poistumiskohta määritetään.
Ensimmäisessä kaavassa IF-funktio tarkistaa, onko vanha lista ei ole tyhjä (vanha""). Jos TRUE, listan MultiReplace funktiota kutsutaan. Jos FALSE, funktio palauttaa arvon teksti sen nykyisessä muodossaan ja poistuu.
Toisessa kaavassa käytetään päinvastaista logiikkaa: jos vanha on tyhjä (old=""), niin palaa takaisin teksti ja poistu; muutoin kutsu MultiReplace .
Vaikein osa on suoritettu! Sinun on enää nimettävä nimi MultiReplace toiminto Name Managerissa alla olevan kuvakaappauksen mukaisesti. Yksityiskohtaiset ohjeet ovat kohdassa LAMBDA-toiminnon nimeäminen.
Kun funktiolle on annettu nimi, voit käyttää sitä aivan kuten mitä tahansa muuta sisäänrakennettua funktiota.
Valitsitpa kumman tahansa näistä kahdesta kaavamuunnelmasta, loppukäyttäjän näkökulmasta syntaksi on näin yksinkertainen:
MultiReplace(teksti, vanha, uusi)Missä:
- Teksti - lähdetiedot
- Vanha - arvot, jotka on löydettävä
- Uusi - arvot, jotka korvataan
Edellisen esimerkin mukaisesti korvataan maan lyhenteiden lisäksi myös osavaltioiden lyhenteet. Kirjoita tätä varten lyhenteet ( vanha arvot) sarakkeessa D alkaen D2 ja täydelliset nimet ( uusi arvot) sarakkeessa E alkaen sarakkeesta E2.
Kirjoita B2-kohdassa MultiReplace-toiminto:
=MultiReplace(A2:A10, D2, E2)
Paina Enter ja nauti tuloksista :)
Miten tämä kaava toimii
Avain kaavan ymmärtämiseen on rekursion ymmärtäminen. Tämä saattaa kuulostaa monimutkaiselta, mutta periaate on varsin yksinkertainen. Jokaisella iteraatiolla rekursiivinen funktio ratkaisee yhden pienen osan suuremmasta ongelmasta. Meidän tapauksessamme, funktio MultiReplace funktio käy silmukalla läpi vanhat ja uudet arvot ja suorittaa jokaisessa silmukassa yhden korvauksen:
MultiReplace (SUBSTITUTE(teksti, vanha, uusi), OFFSET(vanha, 1, 0), OFFSET(uusi, 1, 0))
Kuten sisäkkäisten SUBSTITUTE-funktioiden kohdalla, edellisen SUBSTITUTE-funktion tuloksesta tulee teksti parametri seuraavaa SUBSTITUTEa varten. Toisin sanoen, jokaisella seuraavalla kutsulla MultiReplace , SUBSTITUTE-funktio ei käsittele alkuperäistä merkkijonoa vaan edellisen kutsun tulosta.
Käsittelemään kaikkia kohteita vanha luettelossa aloitamme ylimmästä solusta ja siirrymme OFFSET-funktion avulla yhden rivin alaspäin jokaisen vuorovaikutuksen yhteydessä:
OFFSET(vanha, 1, 0)
Sama tehdään myös uusi lista:
OFFSET(new, 1, 0)
Ratkaisevaa on tarjota poistumispaikka estämään rekursiivisten kutsujen jatkumisen ikuisesti. Se tehdään IF-funktion avulla - jos funktio vanha solu on tyhjä, funktio palauttaa teksti sen nykyisessä muodossaan ja poistuu:
=LAMBDA(text, old, new, IF(old="", text, MultiReplace(...))))
tai
=LAMBDA(text, old, new, IF(old"", MultiReplace(...), text)))
Esimerkki 2. Useiden merkkien korvaaminen Excelissä
Periaatteessa MultiReplace funktio, jota käsiteltiin edellisessä esimerkissä, voi käsitellä myös yksittäisiä merkkejä edellyttäen, että kukin vanha ja uusi merkki syötetään erilliseen soluun, aivan kuten lyhennetyt ja täydet nimet yllä olevissa kuvakaappauksissa.
Jos haluat mieluummin syöttää vanhat merkit yhteen soluun ja uudet merkit toiseen soluun tai kirjoittaa ne suoraan kaavaan, voit luoda toisen mukautetun funktion nimeltä ReplaceChars käyttämällä jotakin näistä kaavoista:
=LAMBDA(teksti, vanhat_merkit, uudet_merkit, IF(vanhat_merkit"", ReplaceChars(SUBSTITUTE(teksti, LEFT(vanhat_merkit), LEFT(uudet_merkit)), RIGHT(vanhat_merkit, LEN(vanhat_merkit)-1), RIGHT(uudet_merkit, LEN(uudet_merkit)-1))), teksti)))
Tai
=LAMBDA(teksti, vanhat_merkit, uudet_merkit, IF(vanhat_merkit="", teksti, ReplaceChars(SUBSTITUTE(teksti, LEFT(vanhat_merkit), LEFT(uudet_merkit)), RIGHT(vanhat_merkit, LEN(vanhat_merkit)-1), RIGHT(uudet_merkit, LEN(uudet_merkit)-1))))
Muista nimetä uusi Lambda-funktio Nimenhallinnassa tavalliseen tapaan:
Ja uusi mukautettu toimintosi on valmis käytettäväksi:
ReplaceChars(teksti, vanhat_merkit, uudet_merkit)Missä:
- Teksti - alkuperäiset jouset
- Vanha - etsittävät merkit
- Uusi - merkit, jotka korvataan
Tehdään kenttätesti ja tehdään jotain, mitä usein tehdään tuotuihin tietoihin - korvataan älykkäät lainausmerkit ja älykkäät apostrofit suorilla lainausmerkeillä ja suorilla apostrofeilla.
Syötämme ensin älykkäät lainausmerkit ja älykkään apostrofin D2:een ja suorat lainausmerkit ja suoran apostrofin E2:een, ja erotamme merkit välilyönneillä luettavuuden parantamiseksi. (Koska käytämme samaa erotinta molemmissa soluissa, sillä ei ole vaikutusta tulokseen - Excel korvaa välilyönnin vain välilyönnillä.)
Tämän jälkeen syötämme tämän kaavan B2-kohtaan:
=ReplaceChars(A2:A4, D2, E2)
Ja saimme juuri ne tulokset, joita etsimme:
Merkit on myös mahdollista kirjoittaa suoraan kaavaan. Meidän tapauksessamme muistat vain "kopioida" suorat lainausmerkit näin:
=ReplaceChars(A2:A4, "" " '", """ "" '" '")
Miten tämä kaava toimii
The ReplaceChars toiminto käy läpi old_chars ja new_chars merkkijonoja ja korvaa yhden merkin kerrallaan alkaen vasemmanpuoleisesta ensimmäisestä merkistä. Tämä osa tehdään SUBSTITUTE-funktiolla:
SUBSTITUTE(teksti, LEFT(vanhat_merkit), LEFT(uudet_merkit))
Jokaisella iteraatiokerralla RIGHT-funktio poistaa yhden merkin vasemmalta puolelta sekä vasemmasta että vasemmasta reunasta. old_chars ja new_chars merkkijonoja, jotta LEFT voisi hakea seuraavan merkkiparin korvattavaksi:
ReplaceChars(SUBSTITUTE(text, LEFT(vanhat_merkit), LEFT(uudet_merkit)), RIGHT(vanhat_merkit, LEN(vanhat_merkit)-1), RIGHT(uudet_merkit, LEN(uudet_merkit)-1)))
Ennen jokaista rekursiivista kutsua IF-funktio arvioi arvon old_chars Jos se ei ole tyhjä, funktio kutsuu itseään. Heti kun viimeinen merkki on korvattu, iterointiprosessi päättyy, kaava palauttaa arvon teksti sen nykyisessä muodossaan ja poistuu.
Huomautus: Koska peruskaavoissa käytetty SUBSTITUTE-funktio on nimeltään case-sensitive , molemmat Lambdat ( MultiReplace ja ReplaceChars ) käsittelevät isoja ja pieniä kirjaimia eri merkkeinä.
Massan etsiminen ja korvaaminen UDF:llä
Jos LAMBDA-funktio ei ole käytettävissä Excelissäsi, voit kirjoittaa käyttäjän määrittelemän monikorvausfunktion perinteisellä tavalla VBA:n avulla.
UDF:n erottamiseksi LAMBDA:n määrittelemästä MultiReplace funktiota, nimeämme sen eri tavalla, vaikkapa seuraavasti MassReplace Toiminnon koodi on seuraava:
Function MassReplace(InputRng As Range, FindRng As Range, ReplaceRng As Range) As Variant () Dim arRes() As Variant 'array tulosten tallentamiseen Dim arSearchReplace(), sTmp As String 'array, johon tallennetaan find/replace-parit, tilapäinen merkkijono Dim iFindCurRow, cntFindRows As Long 'hakuReplace-massamäärän nykyisen rivin indeksi, rivien lukumäärä Dim iInputCurRow, iInputCurCol, cntInputRows,cntInputCols As Long 'lähdealueen nykyisen rivin indeksi, lähdealueen nykyisen sarakkeen indeksi, rivien lukumäärä, sarakkeiden lukumäärä 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) 'valmistellaan haku/korvaus -parien joukkoa ForiFindCurRow = 1 To cntFindRows arSearchReplace(iFindCurRow, 1) = FindRng.Cells(iFindCurRow, 1).Value arSearchReplace(iFindCurRow, 2) = ReplaceRng.Cells(iFindCurRow, 1).Value Next 'Etsiminen ja korvaaminen lähdealueella For iInputCurRow = 1 To cntInputRows For iInputCurCol = 1 To cntInputCols sTmp = InputRng.Cells(iInputCurRow, iInputCurCol).Value 'Kaikkien löytö/korvausparien korvaaminen kussakin solussa.For iFindCurRow = 1 To cntFindRows sTmp = Replace(sTmp, arSearchReplace(iFindCurRow, 1), arSearchReplace(iFindCurRow, 2)) Next arRes(iInputCurRow, iInputCurCol) = sTmp Next Next Next MassReplace = arRes End FunctionKuten LAMBDA:n määrittelemät funktiot, UDF:tkin ovat työkirjan laajuinen Se tarkoittaa, että MassReplace toiminto toimii vain siinä työkirjassa, johon olet lisännyt koodin. Jos et ole varma, miten tämä tehdään oikein, noudata ohjeita, jotka on kuvattu kohdassa VBA-koodin lisääminen Exceliin.
Kun koodi on lisätty työkirjaan, funktio näkyy kaavan intellisense-tiedoissa - vain funktion nimi, ei argumentteja! Uskon kuitenkin, että syntaksin muistaminen ei ole iso juttu:
MassReplace(input_range, find_range, replace_range)Missä:
- Input_range - lähdealue, jonka arvot haluat korvata.
- Find_range - etsittävät merkit, merkkijonot tai sanat.
- Replace_range - merkit, merkkijonot tai sanat, joilla korvataan.
Excel 365:ssä tämä toimii dynaamisten matriisien tuen ansiosta normaalina kaavana, joka on kirjoitettava vain ylimpään soluun (B2):
=MassReplace(A2:A10, D2:D4, E2:E4)
Ennen dynaamista Exceliä tämä toimi vanhan CSE-määrityskaavan tapaan: valitset koko lähdealueen (B2:B10), kirjoitat kaavan ja saat sen valmiiksi painamalla samanaikaisesti Ctrl + Shift + Enter -näppäimiä.
Edut : kunnollinen vaihtoehto mukautetulle LAMBDA-toiminnolle Excel 2019, Excel 2016 ja aiemmat versiot.
Haitat : Työkirja on tallennettava makrotoiminnot mahdollistavana .xlsm-tiedostona.
Bulk korvata Excelissä VBA-makroilla
Jos rakastat yleisten tehtävien automatisointia makrojen avulla, voit käyttää seuraavaa VBA-koodia useiden arvojen etsimiseen ja korvaamiseen alueella.
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 SubJos haluat käyttää makroa heti, voit ladata koodin sisältävän esimerkkityökirjamme tai lisätä koodin omaan työkirjaasi.
Miten makroa käytetään
Ennen makron suorittamista kirjoita vanha ja uusi arvo kahteen vierekkäiseen sarakkeeseen alla olevan kuvan mukaisesti (C2:D4).
Valitse sitten lähdetietosi, paina Alt + F8 , valitse vaihtoehto BulkReplace makroa ja napsauta Suorita .
Koska lähde raivo on esivalittu, tarkista vain viite ja napsauta OK:
Valitse sen jälkeen vaihda alue ja napsauta OK:
Valmis!
Edut : aseta kerran, käytä uudelleen milloin tahansa
Haitat : makro on suoritettava jokaisen tietomuutoksen yhteydessä.
Useita Etsi ja korvaa Excelissä Substring-työkalulla
Aivan ensimmäisessä esimerkissä mainitsin, että sisäkkäinen SUBSTITUTE on helpoin tapa korvata useita arvoja Excelissä. Myönnän olleeni väärässä. Ultimate Suite -ohjelmistomme tekee asioista vieläkin helpompia!
Jos haluat tehdä massakorvauksen laskentataulukkoon, siirry osoitteeseen Ablebits Data välilehteä ja napsauta Osajono Työkalut > Korvaa osajonot .
The Korvaa osajonot avautuu valintaikkuna, jossa pyydetään määrittelemään Lähde alue ja Osajonot alue.
Kun kaksi aluetta on valittu, napsauta Vaihda painiketta ja löydät tulokset uudesta sarakkeesta, joka on lisätty alkuperäisten tietojen oikealle puolelle. Jep, se on niin helppoa!
Vihje. Ennen kuin napsautat Vaihda , on yksi tärkeä asia, joka sinun on otettava huomioon - Case-sensitive Muista valita se, jos haluat käsitellä isoja ja pieniä kirjaimia eri merkkeinä. Tässä esimerkissä rastitamme tämän vaihtoehdon, koska haluamme korvata vain isoilla kirjaimilla kirjoitetut merkkijonot ja jättää muiden sanojen sisällä olevat alimerkkijonot, kuten "fr", "uk" tai "ak", ennalleen.
Jos olet utelias tietämään, mitä muita massatoimintoja merkkijonoille voidaan suorittaa, tutustu muihin Ultimate Suite -pakettiin sisältyviin Substring-työkaluihin. Tai vielä parempi, lataa alla oleva kokeiluversio ja kokeile sitä!
Näin voit etsiä ja korvata useita sanoja ja merkkejä kerralla Excelissä. Kiitän sinua lukemisesta ja toivon, että tapaamme blogissamme ensi viikolla!
Saatavilla olevat lataukset
Useita Etsi ja korvaa Excelissä (.xlsm-tiedosto)
Ultimate Suite 14 päivän täysin toimiva versio (.exe-tiedosto)