Tartalomjegyzék
Ebben a bemutatóban több módszert is megnézünk több szó, karakterlánc vagy egyedi karakter keresésére és cseréjére, hogy kiválaszthassa az igényeinek leginkább megfelelőt.
Hogyan szoktak az emberek általában keresni az Excelben? Legtöbbször a Find & Replace funkcióval, ami jól működik egyetlen érték esetében. De mi van akkor, ha több tíz vagy akár több száz elemet kell kicserélni? Bizonyára senki sem szeretné kézzel egyenként elvégezni az összes cserét, majd újra megtenni az egészet, amikor az adatok megváltoznak. Szerencsére van néhány hatékonyabb módszer a tömeges cserére az Excelben, ésmindegyiket részletesen megvizsgáljuk.
Több érték keresése és helyettesítése egymásba ágyazott SUBSTITUTE-val
Az Excelben a legegyszerűbben a SUBSTITUTE függvény segítségével kereshet és helyettesíthet több bejegyzést.
A képlet logikája nagyon egyszerű: írunk néhány különálló függvényt, hogy egy régi értéket egy új értékkel helyettesítsünk, majd ezeket a függvényeket egymásba ágyazzuk, hogy minden egyes következő SUBSTITUTE az előző SUBSTITUTE kimenetét használja a következő érték kereséséhez.
HELYETTESÍTŐ(HELYETTESÍTŐ(HELYETTESÍTŐ( szöveg , old_text1 , new_text1 ), old_text2 , new_text2 ), old_text3 , new_text3 )Tegyük fel, hogy az A2:A10-es listában a rövidített országneveket (pl. FR , UK és USA ) teljes névvel.
Ehhez írja be a régi értékeket a D2:D4, az új értékeket pedig az E2:E4 mezőbe, ahogy az alábbi képernyőképen látható. Ezután írja be az alábbi képletet a B2 mezőbe, és nyomja meg az Entert:
=SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(A2:A10, D2, E2), D3, E3), D4, E4)
...és az összes csere egyszerre fog megtörténni:
Kérjük, vegye figyelembe, hogy a fenti megközelítés csak a következő esetekben működik Excel 365 amely támogatja a dinamikus tömböket.
Az Excel 2019, Excel 2016 és korábbi, dinamikus verziók előtti verziókban a képletet a legfelső cellába (B2) kell írni, majd átmásolni az alatta lévő cellákba:
=SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(A2, $D$2, $E$2), $D$3, $E$3), $D$4, $E$4), $D$4, $E$4)
Kérjük, figyeljen arra, hogy ebben az esetben a helyettesítő értékeket abszolút cellahivatkozásokkal rögzítjük, így azok nem fognak elmozdulni, amikor a képletet lemásoljuk.
Megjegyzés: A SUBSTITUTE funkció case-sensitive , vagyis a régi értékeket kell beírni ( old_text ) az eredeti adatokban szereplő betűjelekkel megegyezően.
Bármennyire is egyszerű, ennek a módszernek van egy jelentős hátránya - amikor több tucatnyi elemet kell kicserélni, az egymásba ágyazott függvények kezelése meglehetősen nehézzé válik.
Előnyök : könnyen megvalósítható; minden Excel-verzióban támogatott
Hátrányok : a legjobb korlátozott számú értékkereséshez/helyettesítéshez használni
Több bejegyzés keresése és helyettesítése XLOOKUP segítségével
Abban a helyzetben, amikor a teljes cellatartalom , nem a része, az XLOOKUP funkció jól jön.
Tegyük fel, hogy az A oszlopban van egy országlista, és a célunk az összes rövidítés helyettesítése a megfelelő teljes névvel. Az előző példához hasonlóan a "Keresés" és a "Csere" elemek külön oszlopokba (D és E) történő bevitelével kezdjük, majd ezt a képletet írjuk be a B2 oszlopba:
=XLOOKUP(A2, $D$2:$D$4, $E$2:$E$4, A2)
Az Excel nyelvéről az emberi nyelvre lefordítva a képlet a következőket teszi:
Keresse meg az A2 értéket (lookup_value) a D2:D4-ben (lookup_array), és adja vissza az E2:E4-ben (return_array) található egyezést. Ha nem találja meg, vegye ki az eredeti értéket az A2-ből.
Kattintson duplán a kitöltési fogantyúra, hogy a képletet átmásolja az alábbi cellákba, és az eredmény nem fogja megvárakoztatni:
Mivel az XLOOKUP funkció csak az Excel 365-ben érhető el, a fenti képlet nem működik a korábbi verziókban. Ezt a viselkedést azonban könnyen utánozhatja az IFERROR vagy IFNA és a VLOOKUP kombinációjával:
=IFNA(VLOOKUP(A2, $D$2:$E$4, 2, FALSE), A2)
Megjegyzés: A SUBSTITUTE-tól eltérően az XLOOKUP és a VLOOKUP függvények nem nagy- és kisbetű-érzékeny , vagyis a keresési értékeket a betűket figyelmen kívül hagyva keresik. Például a képletünk mind a két szót helyettesítené FR és fr a címen Franciaország .
Előnyök : a szokásos függvények szokatlan használata; minden Excel-verzióban működik
Hátrányok : cellaszinten működik, nem tudja helyettesíteni a cella tartalmának egy részét.
Többszörös csere rekurzív LAMBDA függvény használatával
A Microsoft 365 előfizetők számára az Excel egy speciális funkciót biztosít, amely lehetővé teszi az egyéni függvények létrehozását hagyományos képletnyelv használatával. Igen, a LAMBDA-ról beszélek. A módszer szépsége, hogy egy nagyon hosszú és összetett képletet nagyon kompakt és egyszerű képletté alakíthat át. Sőt, lehetővé teszi saját, az Excelben nem létező függvények létrehozását is, ami korábbancsak VBA-val lehetséges.
Az egyéni LAMBDA függvények létrehozásával és használatával kapcsolatos részletes információkért kérjük, olvassa el ezt a bemutatót: Hogyan írjunk LAMBDA függvényeket Excelben. Itt néhány gyakorlati példát fogunk tárgyalni.
Előnyök : az eredmény egy elegáns és elképesztően egyszerűen használható függvény, függetlenül a cserepárok számától.
Hátrányok : csak az Excel 365-ben érhető el; munkafüzet-specifikus, és nem használható újra különböző munkafüzetekben.
Példa 1. Egyszerre több szó / karakterlánc keresése és helyettesítése
Több szó vagy szöveg egy menetben történő cseréjéhez létrehoztunk egy egyéni LAMBDA függvényt, melynek neve MultiReplace , amely a következő formák egyikét öltheti:
=LAMBDA(text, régi, új, IF(régi"", MultiReplace(SUBSTITUTE(text, régi, új), OFFSET(régi, 1, 0), OFFSET(új, 1, 0)), text)))
Vagy
=LAMBDA(text, régi, új, IF(régi="", text, MultiReplace(SUBSTITUTE(text, régi, új), OFFSET(régi, 1, 0), OFFSET(új, 1, 0))))
Mindkettő rekurzív függvény, amely önmagát hívja meg. A különbség csak abban van, hogy a kilépési pontot hogyan határozzuk meg.
Az első képletben az IF függvény ellenőrzi, hogy a régi lista nem üres (régi""). Ha TRUE, akkor a MultiReplace Ha FALSE, akkor a függvény a következő értéket adja vissza szöveg a jelenlegi formáját és kilép.
A második képlet a fordított logikát használja: ha régi üres (old=""), akkor return szöveg és kilép; máskülönben hívja a MultiReplace .
A legtrükkösebb rész már megtörtént! Már csak az van hátra, hogy megnevezd a MultiReplace funkciót a Névkezelőben az alábbi képernyőképen látható módon. A részletes útmutatót lásd a Hogyan nevezzünk el egy LAMBDA-funkciót.
Miután a függvény nevet kapott, ugyanúgy használhatja, mint bármely más beépített függvényt.
Bármelyik képletváltozatot is választja, a végfelhasználó szempontjából a szintaxis ilyen egyszerű:
MultiReplace(text, régi, új)Hol:
- Szöveg - a forrásadatok
- Régi - az értékek megtalálása
- Új - az értékek helyettesítésére
Az előző példát egy kicsit tovább folytatva, ne csak az ország rövidítéseket, hanem az állam rövidítéseket is helyettesítsük. Ehhez írjuk be a rövidítéseket ( régi értékek) a D2-vel kezdődő D oszlopban és a teljes nevek ( új értékek) az E oszlopban az E2-től kezdődően.
A B2-ben adja meg a MultiReplace funkciót:
=MultiReplace(A2:A10, D2, E2)
Nyomja meg az Entert és élvezze az eredményeket :)
Hogyan működik ez a képlet
A képlet megértéséhez a kulcs a rekurzió megértése. Ez bonyolultnak hangozhat, de az elv nagyon egyszerű. Minden egyes iterációval egy rekurzív függvény egy nagyobb probléma egy kis példányát oldja meg. Esetünkben a MultiReplace függvény a régi és az új értékeken végigmegy, és minden egyes ciklusban végrehajt egy cserét:
MultiReplace (SUBSTITUTE(text, régi, új), OFFSET(régi, 1, 0), OFFSET(új, 1, 0))
Mint a beágyazott SUBSTITUTE függvények esetében, az előző SUBSTITUTE függvény eredménye lesz a szöveg paramétert a következő SUBSTITUTE-hoz. Más szóval, a SUBSTITUTE minden egyes következő hívásakor a MultiReplace , a SUBSTITUTE függvény nem az eredeti szöveges karakterláncot, hanem az előző hívás kimenetét dolgozza fel.
Az összes elem kezelésére a régi listát, a legfelső cellával kezdjük, és az OFFSET függvény segítségével minden egyes interakcióval 1 sorral lejjebb lépünk:
OFFSET(régi, 1, 0)
Ugyanez történik a új lista:
OFFSET(new, 1, 0)
A legfontosabb dolog az, hogy egy kilépési pont hogy megakadályozzuk, hogy a rekurzív hívások örökké folytatódjanak. Ez az IF függvény segítségével történik - ha a régi cella üres, a függvény visszatér szöveg a jelenlegi formáját és kilép:
=LAMBDA(text, régi, új, IF(régi="", text, MultiReplace(...)))
vagy
=LAMBDA(text, régi, új, IF(régi"", MultiReplace(...), text))
Példa 2. Több karakter cseréje Excelben
Elvileg a MultiReplace függvény az előző példában tárgyalt egyes karaktereket is képes kezelni, feltéve, hogy minden egyes régi és új karaktert külön cellába írunk be, pontosan úgy, mint a fenti képernyőképeken látható rövidített és teljes neveket.
Ha a régi karaktereket inkább az egyik cellába, az új karaktereket pedig egy másik cellába szeretné beírni, vagy közvetlenül a képletbe, akkor létrehozhat egy másik egyéni függvényt, amelynek neve ReplaceChars , az alábbi képletek valamelyikének használatával:
=LAMBDA(text, régi_jelek, új_jelek, IF(régi_jelek"", ReplaceChars(SUBSTITUTE(text, LEFT(régi_jelek), LEFT(új_jelek)), RIGHT(régi_jelek, LEN(régi_jelek)-1), RIGHT(új_jelek, LEN(új_jelek)-1))), text)))
Vagy
=LAMBDA(text, régi_jelek, új_jelek, IF(régi_jelek="", text, ReplaceChars(SUBSTITUTE(text, LEFT(régi_jelek), LEFT(új_jelek)), RIGHT(régi_jelek, LEN(régi_jelek)-1), RIGHT(új_jelek, LEN(új_jelek)-1))))
Ne feledje, hogy az új Lambda függvényt a szokásos módon elnevezze a Névkezelőben:
És az új egyéni funkció készen áll a használatra:
ReplaceChars(text, régi_jelek, új_jelek)Hol:
- Szöveg - az eredeti húrok
- Régi - a keresendő karakterek
- Új - a karakterek helyettesítésére
A gyakorlati teszthez tegyünk valamit, amit gyakran végeznek importált adatokon - cseréljük le az intelligens idézőjeleket és az intelligens aposztrófokat egyenes idézőjelekre és egyenes aposztrófokra.
Először a D2-be írjuk be az intelligens idézőjeleket és az intelligens aposztrófot, az E2-be pedig az egyenes idézőjeleket és az egyenes aposztrófot, a jobb olvashatóság érdekében szóközzel elválasztva a karaktereket. (Mivel mindkét cellában ugyanazt az elválasztójelet használjuk, ez nem befolyásolja az eredményt - az Excel egyszerűen szóközzel helyettesíti a szóközt.)
Ezután ezt a képletet beírjuk a B2-be:
=ReplaceChars(A2:A4, D2, E2)
És pontosan azt az eredményt kapjuk, amit kerestünk:
Az is lehetséges, hogy a karaktereket közvetlenül a képletbe írjuk be. A mi esetünkben csak ne felejtsük el "duplikálni" az egyenes idézőjeleket, így:
=ReplaceChars(A2:A4, "" " '", """ "" "" '" '")
Hogyan működik ez a képlet
A ReplaceChars funkció ciklikusan végigjárja a old_chars és new_chars karakterláncokat, és a bal oldali első karaktertől kezdve egyszerre csak egy-egy karaktert cserél ki. Ezt a részt a SUBSTITUTE függvény végzi:
SUBSTITUTE(text, LEFT(régi_jelek), LEFT(új_jelek))
A RIGHT függvény minden egyes iterációnál eltávolít egy karaktert a bal oldalról mind a old_chars és new_chars karakterláncokat, hogy a LEFT le tudja hívni a következő karakterpárt a helyettesítéshez:
ReplaceChars(SUBSTITUTE(text, LEFT(régi_jelek), LEFT(új_jelek)), RIGHT(régi_jelek, LEN(régi_jelek)-1), RIGHT(új_jelek, LEN(új_jelek)-1)))
Minden rekurzív hívás előtt az IF függvény kiértékeli a old_chars Ha nem üres, a függvény önmagát hívja meg. Amint az utolsó karaktert is kicserélték, az iterációs folyamat befejeződik, a képlet visszaadja a szöveg a jelenlegi formáját és kilép.
Megjegyzés: Mivel az alapvető képleteinkben használt SUBSTITUTE függvény a következő case-sensitive , mindkét Lambda ( MultiReplace és ReplaceChars ) a nagy- és kisbetűket különböző karakterekként kezeli.
Tömeges keresés és csere UDF-fel
Ha a LAMBDA függvény nem érhető el az Excelben, akkor a VBA segítségével hagyományos módon írhat egy felhasználó által definiált függvényt a többszörös helyettesítéshez.
Az UDF megkülönböztetése a LAMBDA által definiált MultiReplace függvényt másképp fogjuk elnevezni, mondjuk úgy, hogy MassReplace A függvény kódja a következő:
Function MassReplace(InputRng As Range, FindRng As Range, ReplaceRng As Range) As Variant () Dim arRes() As Variant 'az eredmények tárolására szolgáló tömb Dim arSearchReplace(), sTmp As String 'tömb, ahol a keresés/helyettesítés párokat tároljuk, ideiglenes karakterlánc Dim iFindCurRow, cntFindRows As Long 'a SearchReplace tömb aktuális sorának indexe, a sorok száma Dim iInputCurRow, iInputCurCol, cntInputRows,cntInputCols As Long 'az aktuális sor indexe a forrás tartományban, az aktuális oszlop indexe a forrás tartományban, sorok száma, oszlopok száma 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) 'a keresés/helyettesítés párok tömbjének előkészítése ForiFindCurRow = 1 To cntFindRows arSearchReplace(iFindCurRow, 1) = FindRng.Cells(iFindCurRow, 1).Value arSearchReplace(iFindCurRow, 2) = ReplaceRng.Cells(iFindCurRow, 1).Value Next 'Keresés és csere a forrás tartományban For iInputCurRow = 1 To cntInputRows For iInputCurCol = 1 To cntInputCols sTmp = InputRng.Cells(iInputCurRow, iInputCurCol).Value 'Minden cellában az összes keresés/helyettesítés pár cseréje.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 FunctionA LAMBDA által definiált függvényekhez hasonlóan az UDF-ek is az egész munkafüzetre kiterjedő Ez azt jelenti, hogy a MassReplace funkció csak abban a munkafüzetben fog működni, amelybe a kódot beillesztette. Ha nem tudja, hogyan kell ezt helyesen elvégezni, kövesse a Hogyan kell VBA-kódot beilleszteni az Excelben című fejezetben leírt lépéseket.
Miután a kódot hozzáadtad a munkafüzetedhez, a függvény megjelenik a formula intellisense-ben - csak a függvény neve, az argumentumok nem! Bár szerintem nem nagy dolog megjegyezni a szintaxist:
MassReplace(input_range, find_range, replace_range)Hol:
- Input_range - a forrástartomány, ahol az értékeket helyettesíteni szeretné.
- Find_range - a keresendő karakterek, karakterláncok vagy szavak.
- Replace_range - a karakterek, karakterláncok vagy szavak, amelyekkel helyettesíteni kell.
Az Excel 365-ben a dinamikus tömbök támogatása miatt ez normál képletként működik, amelyet csak a legfelső cellába (B2) kell beírni:
=MassReplace(A2:A10, D2:D4, E2:E4)
A dinamikus Excel előtti Excelben ez úgy működik, mint egy régi típusú CSE tömbképlet: kijelöli a teljes forrástartományt (B2:B10), beírja a képletet, és a Ctrl + Shift + Enter billentyűkkel egyszerre nyomja le a képlet befejezéséhez.
Előnyök : egy tisztességes alternatíva az Excel 2019, Excel 2016 és korábbi verziók egyéni LAMBDA függvényéhez
Hátrányok : a munkafüzetet makrókat engedélyező .xlsm fájlként kell elmenteni.
Tömeges csere Excelben VBA makróval
Ha szereti a gyakori feladatok makrókkal történő automatizálását, akkor a következő VBA-kód segítségével több értéket kereshet és helyettesíthet egy tartományban.
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 SubHa azonnal használni szeretné a makrót, letöltheti a kódot tartalmazó mintamunkafüzetünket. Vagy beillesztheti a kódot a saját munkafüzetébe.
A makró használata
A makró futtatása előtt írja be a régi és az új értékeket két szomszédos oszlopba, ahogy az alábbi képen látható (C2:D4).
Ezután válassza ki a forrásadatokat, nyomja meg az Alt + F8 billentyűkombinációt, válassza a BulkReplace makró, és kattintson a Fuss .
Mivel a forrás düh elő van választva, csak ellenőrizze a hivatkozást, és kattintson az OK gombra:
Ezután válassza ki a cserélje ki a tartományt , és kattintson az OK gombra:
Kész!
Előnyök : egyszeri beállítás, bármikor újrafelhasználható
Hátrányok : a makrót minden adatváltozáskor el kell indítani.
Többszörös keresés és csere az Excelben a Substring eszközzel
A legelső példában említettem, hogy a beágyazott SUBSTITUTE a legegyszerűbb módja annak, hogy több értéket helyettesítsünk az Excelben. Bevallom, tévedtem. Az Ultimate Suite még egyszerűbbé teszi a dolgokat!
Ha tömeges cserét szeretne végezni a munkalapon, lépjen át a Ablebits adatok fülre, és kattintson a Szubsztring eszközök > Részláncok cseréje .
A Részláncok cseréje párbeszédpanel jelenik meg, amely a Forrás tartomány és Részsztringek tartományban.
A két tartomány kijelölésével kattintson a Cserélje ki a címet. gombot, és az eredményeket az eredeti adatok jobb oldalán lévő új oszlopban találja. Igen, ilyen egyszerű!
Tipp. Mielőtt a Cserélje ki a címet. , van egy fontos dolog, amit figyelembe kell vennie - a Nagybetű-érzékeny jelölje be, ha a nagy- és kisbetűket különböző karakterekként kívánja kezelni. Ebben a példában azért jelöljük be ezt az opciót, mert csak a nagybetűs karakterláncokat szeretnénk kicserélni, és érintetlenül hagyjuk az olyan részláncokat, mint a "fr", "uk" vagy "ak" más szavakon belül.
Ha kíváncsi vagy, hogy milyen más tömeges műveleteket végezhetsz a karakterláncokon, nézd meg a többi Substring eszközt, amely az Ultimate Suite-ban található. Vagy még jobb, töltsd le az alábbi tesztverziót és próbáld ki!
Így lehet egyszerre több szót és karaktert keresni és helyettesíteni az Excelben. Köszönöm, hogy elolvastad, és remélem, jövő héten találkozunk a blogon!
Elérhető letöltések
Többszörös keresés és csere Excelben (.xlsm fájl)
Ultimate Suite 14 napos, teljesen funkcionális verzió (.exe fájl)