Excel: mitme väärtuse leidmine ja asendamine korraga

  • Jaga Seda
Michael Brown

Selles õpetuses vaatleme mitmeid võimalusi mitme sõna, stringi või üksiku tähemärgi leidmiseks ja asendamiseks, nii et saate valida selle, mis sobib teie vajadustele kõige paremini.

Kuidas inimesed tavaliselt Excelis otsivad? Enamasti kasutades funktsiooni Find & Replace, mis töötab hästi üksikute väärtuste puhul. Aga mis siis, kui teil on kümneid või isegi sadu elemente, mida asendada? Kindlasti ei taha keegi kõiki neid asendusi käsitsi ükshaaval teha ja siis seda uuesti teha, kui andmed muutuvad. Õnneks on olemas mõned tõhusamad meetodid massilise asendamise tegemiseks Excelis jauurime igaüht neist üksikasjalikult.

    Mitme väärtuse leidmine ja asendamine sisseehitatud SUBSTITUTE'iga

    Kõige lihtsam viis mitme kirje leidmiseks ja asendamiseks Excelis on kasutada funktsiooni SUBSTITUTE.

    Valemi loogika on väga lihtne: kirjutate mõned üksikud funktsioonid, et asendada vana väärtus uue väärtusega. Ja siis pesastate need funktsioonid üksteise sisse, nii et iga järgmine SUBSTITUTE kasutab eelmise SUBSTITUTE'i väljundit järgmise väärtuse otsimiseks.

    SUBSTITUTE(SUBSTITUTE(SUBSTITUTE( tekst , vana_tekst1 , new_text1 ), vana_tekst2 , new_text2 ), vana_tekst3 , new_text3 )

    Oletame, et soovite asendada A2:A10 kohanimede nimekirjas lühendatud riiginimed (näiteks FR , UK ja USA ) täisnimedega.

    Selleks sisestage vanad väärtused D2:D4 ja uued väärtused E2:E4, nagu on näidatud allpool oleval ekraanipildil. Ja seejärel sisestage allpool olev valem B2 ja vajutage Enter:

    =SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(A2:A10, D2, E2), D3, E3), D4, E4)

    ...ja te saate kõik asendused korraga tehtud:

    Pange tähele, et ülaltoodud lähenemine töötab ainult Excel 365 mis toetab dünaamilisi massiive.

    Exceli 2019, Excel 2016 ja varasemates dünaamika-eelsetes versioonides tuleb valem kirjutada kõige ülemisse lahtrisse (B2) ja seejärel kopeerida see allpool asuvatesse lahtritesse:

    =SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(A2, $D$2, $E$2), $D$3, $E$3), $D$4, $E$4)

    Pöörake tähelepanu, et sel juhul lukustame asendusväärtused absoluutsete lahtriviidetega, nii et need ei nihkuksid valemi kopeerimisel alla.

    Märkus. Funktsioon SUBSTITUTE on suur- ja väiketähelepanu , mis tähendab, et te peaksite sisestama vanad väärtused ( old_text ) samas kirjas, nagu need on algandmetes.

    Nii lihtne kui see ka poleks, on sellel meetodil üks märkimisväärne puudus - kui teil on kümneid asendatavaid elemente, on sisseehitatud funktsioone üsna raske hallata.

    Eelised : lihtne rakendada; toetatud kõigis Exceli versioonides

    Puudused : parim kasutada piiratud arvu väärtuste leidmiseks/asendamiseks

    Mitme kirje otsimine ja asendamine XLOOKUPiga

    Olukorras, kus soovite asendada kogu raku sisu , mitte selle osa, tuleb appi XLOOKUP-funktsioon.

    Oletame, et teil on riikide nimekiri veerus A ja teie eesmärk on asendada kõik lühendid vastavate täisnimedega. Nagu eelmises näites, alustate te "Leia" ja "Asenda" elementide sisestamisega eraldi veergudesse (vastavalt D ja E) ja seejärel sisestate selle valemi veergu B2:

    =XLOOKUP(A2, $D$2:$D$4, $E$2:$E$4, A2)

    Exceli keelest inimkeelde tõlgituna on valem järgmine:

    Otsi A2 väärtust (lookup_value) D2:D4 (lookup_array) ja tagasta vastavus E2:E4 (return_array). Kui ei leia, võta algne väärtus A2-st.

    Topeltklõpsake täitekäepidemel, et valem kopeeritaks allpool olevatesse lahtritesse, ja tulemus ei lase teil oodata:

    Kuna funktsioon XLOOKUP on saadaval ainult Excel 365s, ei tööta ülaltoodud valem varasemates versioonides. Siiski saate seda käitumist hõlpsasti jäljendada IFERRORi või IFNA ja VLOOKUPi kombinatsiooniga:

    =IFNA(VLOOKUP(A2, $D$2:$E$4, 2, FALSE), A2)

    Märkus. Erinevalt SUBSTITUTE'ist on XLOOKUP ja VLOOKUP funktsioonid ei sõltu suur- ja väiketähendusest , mis tähendab, et nad otsivad otsinguväärtusi, ignoreerides tähtede suurust. Näiteks meie valem asendaks nii FR ja fr koos Prantsusmaa .

    Eelised : tavapäraste funktsioonide ebatavaline kasutamine; töötab kõigis Exceli versioonides

    Puudused : töötab lahtri tasandil, ei saa asendada osa lahtri sisust.

    Mitmekordne asendamine rekursiivse LAMBDA funktsiooni abil

    Microsoft 365 tellijatele pakub Excel spetsiaalset funktsiooni, mis võimaldab luua kohandatud funktsioone, kasutades traditsioonilist valemikeelt. Jah, ma räägin LAMBDA-st. Selle meetodi ilu seisneb selles, et sellega saab muuta väga pika ja keerulise valemi väga kompaktseks ja lihtsaks. Lisaks võimaldab see luua oma funktsioone, mida Excelis ei ole olemas, mis oli ennevõimalik ainult VBAga.

    Üksikasjalikku teavet kohandatud LAMBDA-funktsioonide loomise ja kasutamise kohta leiate sellest juhendmaterjalist: Kuidas kirjutada LAMBDA-funktsioone Excelis. Siinkohal käsitleme paari praktilist näidet.

    Eelised : tulemuseks on elegantne ja hämmastavalt lihtsalt kasutatav funktsioon, sõltumata asenduspaaride arvust

    Puudused : saadaval ainult Excel 365s; töövihikupõhine ja seda ei saa kasutada uuesti erinevates töövihikutes.

    Näide 1. Otsige ja asendage mitu sõna / stringi korraga

    Mitme sõna või teksti korraga asendamiseks oleme loonud kohandatud LAMBDA funktsiooni nimega MultiReplace , mis võib võtta ühe järgmistest vormidest:

    =LAMBDA(text, old, new, IF(old"", MultiReplace(SUBSTITUTE(text, old, new), OFFSET(old, 1, 0), OFFSET(new, 1, 0)), text))

    Või

    =LAMBDA(text, old, new, IF(old="", text, MultiReplace(SUBSTITUTE(text, old, new), OFFSET(old, 1, 0), OFFSET(new, 1, 0))))

    Mõlemad on rekursiivsed funktsioonid, mis kutsuvad end ise. Erinevus on ainult selles, kuidas väljumispunkt määratakse.

    Esimeses valemis kontrollib funktsioon IF, kas vana nimekiri ei ole tühi (vana""). Kui TRUE, siis on MultiReplace Kui funktsioon on FALSE, siis tagastab funktsioon tekst selle praegusel kujul ja väljub.

    Teine valem kasutab vastupidist loogikat: kui vana on tühi (old=""), siis tagastatakse tekst ja väljuda; vastasel juhul kutsu MultiReplace .

    Kõige keerulisem osa on tehtud! Teie jaoks jääb üle vaid nimetada nimi MultiReplace funktsiooni Name Manager'is, nagu on näidatud allpool oleval ekraanipildil. Üksikasjalikud juhised leiate jaotisest Kuidas nimetada LAMBDA funktsiooni.

    Kui funktsioon saab nime, saate seda kasutada nagu iga muud sisseehitatud funktsiooni.

    Ükskõik, millise kahest valemivariandist te valite, on süntaks lõppkasutaja seisukohast nii lihtne:

    MultiReplace(text, vana, uus)

    Kus:

    • Tekst - lähteandmed
    • Vana - väärtused, et leida
    • Uus - väärtused, mis tuleb asendada

    Võttes eelmist näidet veidi edasi, asendame mitte ainult riigi lühendid, vaid ka riigi lühendid. Selleks kirjutame lühendid ( vana väärtused) veerus D alates D2 ja täisnimed ( uus väärtused) veerus E alates E2.

    Sisestage B2-s MultiReplace funktsioon:

    =MultiReplace(A2:A10, D2, E2)

    Vajutage Enter ja nautige tulemusi :)

    Kuidas see valem töötab

    Valemi mõistmise võti on rekursiooni mõistmine. See võib tunduda keeruline, kuid põhimõte on üsna lihtne. Iga iteratsiooniga lahendab rekursiivne funktsioon ühe väikese instantsi suuremast probleemist. Meie puhul on tegemist MultiReplace funktsioon läbib vanu ja uusi väärtusi ja teeb iga tsükli puhul ühe asenduse:

    MultiReplace (SUBSTITUTE(text, vana, uus), OFFSET(vana, 1, 0), OFFSET(uus, 1, 0))

    Nagu ka sisseehitatud SUBSTITUTE funktsioonide puhul, muutub eelmise SUBSTITUTE funktsiooni tulemus tekst parameeter järgmise SUBSTITUTE'i jaoks. Teisisõnu, iga järgneva SUBSTITUTE'i üleskutse korral on MultiReplace , siis funktsioon SUBSTITUTE ei töötle mitte algset tekstijada, vaid eelmise kõne väljundit.

    Kõigi objektide käsitlemiseks vana nimekirja, alustame kõige ülemisest lahtrist ja kasutame funktsiooni OFFSET, et liikuda iga interaktsiooniga 1 rea võrra allapoole:

    OFFSET(vana, 1, 0)

    Sama tehakse ka uus nimekiri:

    OFFSET(new, 1, 0)

    Oluline on pakkuda väljumiskoht et vältida rekursiivsete kõnede jätkumist igavesti. Seda tehakse IF-funktsiooni abil - kui vana lahter on tühi, funktsioon tagastab tekst see oma praegusel kujul ja väljub:

    =LAMBDA(text, old, new, IF(old="", text, MultiReplace(...)))

    või

    =LAMBDA(text, old, new, IF(old"", MultiReplace(...), text))

    Näide 2. Mitme tähemärgi asendamine Excelis

    Põhimõtteliselt on MultiReplace eelmises näites käsitletud funktsioon saab käsitleda ka üksikuid märke, tingimusel, et iga vana ja uus märk sisestatakse eraldi lahtrisse, täpselt nagu lühendatud ja täisnimed ülaltoodud ekraanipiltidel.

    Kui soovite pigem sisestada vanad tähemärgid ühte lahtrisse ja uued tähemärgid teise lahtrisse või sisestada need otse valemisse, siis saate luua teise kohandatud funktsiooni nimega ReplaceChars , kasutades ühte neist valemitest:

    =LAMBDA(text, vanad_tähised, uued_tähised, IF(vanad_tähised"", ReplaceChars(SUBSTITUTE(text, LEFT(vanad_tähised), LEFT(uued_tähised)), RIGHT(vanad_tähised, LEN(vanad_tähised)-1), RIGHT(uued_tähised, LEN(uued_tähised)-1))), text))

    Või

    =LAMBDA(text, vanad_tähised, uued_tähised, IF(vanad_tähised="", text, ReplaceChars(SUBSTITUTE(text, LEFT(vanad_tähised), LEFT(uued_tähised)), RIGHT(vanad_tähised, LEN(vanad_tähised)-1), RIGHT(uued_tähised, LEN(uued_tähised)-1))))

    Ärge unustage oma uue Lambda-funktsiooni nime tavapäraselt nimehalduris:

    Ja teie uus kohandatud funktsioon on kasutamiseks valmis:

    ReplaceChars(text, vanad_tähised, uued_tähised)

    Kus:

    • Tekst - algsed keeled
    • Vana - märgid, mida otsida
    • Uus - tähemärgid, mis tuleb asendada

    Selleks, et seda proovile panna, teeme midagi, mida imporditud andmetega sageli tehakse - asendame nutikad jutumärgid ja nutikad apostroofid sirgete jutumärkide ja sirgete apostroofidega.

    Esmalt sisestame nutikad jutumärgid ja nutikad apostroofid D2-sse, sirged jutumärgid ja sirged apostroofid E2-sse, eraldades märgid parema loetavuse huvides tühikutega. (Kuna kasutame mõlemas lahtris sama eraldajat, ei mõjuta see tulemust - Excel lihtsalt asendab tühiku tühikuga).

    Pärast seda sisestame selle valemi B2:

    =ReplaceChars(A2:A4, D2, E2)

    Ja saada täpselt need tulemused, mida me otsisime:

    Samuti on võimalik tähemärke otse valemisse kirjutada. Meie puhul tuleb lihtsalt meeles pidada, et "dubleerime" sirgeid jutumärke niimoodi:

    =ReplaceChars(A2:A4, "" " '", """ "" '" '")

    Kuidas see valem töötab

    The ReplaceChars funktsioon läbib tsükliliselt old_chars ja new_chars stringid ja teeb ühe asenduse korraga, alustades esimesest tähemärgist vasakul. Selle osa teeb funktsioon SUBSTITUTE:

    SUBSTITUTE(text, LEFT(vanad_tähised), LEFT(uued_tähised))

    Iga iteratsiooniga eemaldab funktsioon RIGHT ühe tähemärgi vasakult nii vasakult kui ka vasakult. old_chars ja new_chars stringid, nii et LEFT saaks välja võtta järgmise tähepaari asendamiseks:

    ReplaceChars(SUBSTITUTE(text, LEFT(vanad_tähised), LEFT(uued_tähised)), RIGHT(vanad_tähised, LEN(vanad_tähised)-1), RIGHT(uued_tähised, LEN(uued_tähised)-1))

    Enne iga rekursiivset väljakutset hindab funktsioon IF funktsiooni old_chars string. Kui see ei ole tühi, kutsub funktsioon iseennast. Niipea, kui viimane märk on asendatud, lõpetab iteratsiooniprotsessi, valem tagastab tekst see oma praegusel kujul ja väljub.

    Märkus. Kuna meie põhivalemites kasutatav SUBSTITUTE funktsioon on suur- ja väiketähelepanu , mõlemad Lambdad ( MultiReplace ja ReplaceChars ) käsitlevad suuri ja väikseid tähti erinevate tähtedena.

    Massiline leidmine ja asendamine UDFiga

    Juhul, kui LAMBDA funktsioon ei ole teie Excelis saadaval, saate VBA abil kirjutada mitme asendamise jaoks kasutajaspetsiifilise funktsiooni traditsioonilisel viisil.

    Et eristada UDFi LAMBDA poolt määratletud MultiReplace funktsiooni, siis nimetame seda teisiti, näiteks MassReplace Funktsiooni kood on järgmine:

    Function MassReplace(InputRng As Range, FindRng As Range, ReplaceRng As Range) As Variant () Dim arRes() As Variant 'massiivi tulemuste salvestamiseks Dim arSearchReplace(), sTmp As String 'massiivi, kuhu salvestada leidmise/asendamise paarid, ajutine string Dim iFindCurRow, cntFindRows As Long 'otsinguReplace massiivi praeguse rea indeks, ridade arv Dim iInputCurRow, iInputCurCol, cntInputRows,cntInputCols As Long 'praeguse rea indeks lähtepiirkonnas, praeguse veeru indeks lähtepiirkonnas, ridade arv, veergude arv 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) 'leidmise/asendamise paaride massiivi ettevalmistamine ForiFindCurRow = 1 To cntFindRows arSearchReplace(iFindCurRow, 1) = FindRng.Cells(iFindCurRow, 1).Value arSearchReplace(iFindCurRow, 2) = ReplaceRng.Cells(iFindCurRow, 1).Value Next 'Otsimine ja asendamine lähtepiirkonnas For iInputCurRow = 1 To cntInputRows For iInputCurCol = 1 To cntInputCols sTmp = InputRng.Cells(iInputCurRow, iInputCurCol).Value 'Kõigi find/replace paaride asendamine igas lahtris.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 Function

    Nagu LAMBDA määratletud funktsioonid, on ka UDFid kogu töövihikut hõlmav See tähendab, et MassReplace funktsioon töötab ainult selles töövihikus, kuhu te olete koodi sisestanud. Kui te ei ole kindel, kuidas seda õigesti teha, siis järgige peatükis Kuidas sisestada VBA-koodi Excelis kirjeldatud samme.

    Kui kood on lisatud teie töövihikusse, ilmub funktsioon valemi intellisense - ainult funktsiooni nimi, mitte argumendid! Kuigi, ma usun, et süntaksi meeles pidamine ei ole suur probleem:

    MassReplace(input_range, find_range, replace_range)

    Kus:

    • Input_range - lähtepiirkond, mille väärtusi soovite asendada.
    • Find_range - märgid, stringid või sõnad, mida otsida.
    • Replace_range - tähemärgid, stringid või sõnad, millega asendada.

    Excel 365s töötab see tänu dünaamiliste massiivi toetusele tavalise valemina, mis tuleb sisestada ainult ülemisse lahtrisse (B2):

    =MassReplace(A2:A10, D2:D4, E2:E4)

    Dünaamikaeelses Excelis töötab see nagu vana stiilis CSE massiivi valem: valite kogu lähtevahemiku (B2:B10), sisestate valemi ja vajutate selle täitmiseks samaaegselt klahve Ctrl + Shift + Enter.

    Eelised : korralik alternatiiv kohandatud LAMBDA-funktsioonile Excel 2019, Excel 2016 ja varasemad versioonid

    Puudused : töövihik peab olema salvestatud makrotoimingutega .xlsm-failina.

    Massiline asendamine Excelis VBA makroga

    Kui sulle meeldib automatiseerida tavalisi ülesandeid makrode abil, siis võid kasutada järgmist VBA-koodi, et leida ja asendada mitu väärtust vahemikus.

    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 Sub

    Et makrot kohe kasutada, saate alla laadida meie näidistöövihiku, mis sisaldab koodi. Või võite sisestada koodi omaenda töövihikusse.

    Kuidas kasutada makrot

    Enne makro käivitamist sisestage vanad ja uued väärtused kahte kõrvuti asetsevasse veergu, nagu on näidatud alloleval pildil (C2:D4).

    Ja siis valige oma lähteandmed, vajutage Alt + F8 , valige BulkReplace makro ja klõpsake Käivita .

    Kuna allikas viha on eelnevalt valitud, kontrollige lihtsalt viidet ja klõpsake OK:

    Pärast seda valige asendage vahemik ja klõpsake OK:

    Valmis!

    Eelised : seadistus üks kord, taaskasutamine igal ajal

    Puudused : makro tuleb käivitada iga andmemuutuse korral.

    Mitu otsingut ja asendamist Excelis koos Substringi tööriistaga

    Juba esimeses näites mainisin, et sisendatud SUBSTITUTE on kõige lihtsam viis mitme väärtuse asendamiseks Excelis. Tunnistan, et ma eksisin. Meie Ultimate Suite teeb asja veelgi lihtsamaks!

    Massi asendamise tegemiseks oma töölehel, suunduge töölehel Ablebits andmed vahekaart ja klõpsake Substring tööriistad > Asendada alamsõnu .

    The Asendada alamsõnu ilmub dialoogiboks, kus palutakse määrata Allikas vahemik ja Substrings vahemik.

    Kui kaks vahemikku on valitud, klõpsake nuppu Asendage nuppu ja leiate tulemused uues veerus, mis on lisatud algsetest andmetest paremale. Jah, nii lihtne see ongi!

    Vihje. Enne klõpsamist Asendage , on üks oluline asi, mida peate arvestama - see on Suur- ja väiketähenduslik kasti. Valige see kindlasti, kui soovite suur- ja väiketähtede käsitlemist erinevate tähtedena. Selles näites märgistame selle valiku, sest soovime asendada ainult suurtähtede stringid ja jätta teiste sõnade sees olevad alajaotused nagu "fr", "uk" või "ak" puutumata.

    Kui olete uudishimulik teada, milliseid muid massoperatsioone saab stringidega teha, vaadake teisi Substring Tools, mis on lisatud meie Ultimate Suite'ile. Või veelgi parem, laadige alla allpool olev hindamisversioon ja proovige seda!

    Nii saab Excelis leida ja asendada mitu sõna ja märki korraga. Tänan teid lugemise eest ja loodan, et näeme teid järgmisel nädalal meie blogis!

    Saadaolevad allalaadimised

    Mitu leidmist ja asendamist Excelis (.xlsm fail)

    Ultimate Suite 14-päevane täisfunktsionaalne versioon (.exe fail)

    Michael Brown on pühendunud tehnoloogia entusiast, kelle kirg on tarkvaratööriistade abil keerukate protsesside lihtsustamine. Rohkem kui kümneaastase kogemusega tehnoloogiatööstuses on ta lihvinud oma oskusi Microsoft Excelis ja Outlookis, samuti Google Sheetsis ja Docsis. Michaeli ajaveebi eesmärk on jagada oma teadmisi ja teadmisi teistega, pakkudes hõlpsasti järgitavaid näpunäiteid ja õpetusi tootlikkuse ja tõhususe parandamiseks. Olenemata sellest, kas olete kogenud professionaal või algaja, pakub Michaeli ajaveebi väärtuslikke teadmisi ja praktilisi nõuandeid nende oluliste tarkvaratööriistade maksimaalseks kasutamiseks.