Excel: vyhľadávanie a nahrádzanie viacerých hodnôt naraz

  • Zdieľajte To
Michael Brown

V tomto návode sa pozrieme na niekoľko spôsobov vyhľadávania a nahrádzania viacerých slov, reťazcov alebo jednotlivých znakov, aby ste si mohli vybrať ten, ktorý najlepšie vyhovuje vašim potrebám.

Ako ľudia zvyčajne vyhľadávajú v programe Excel? Väčšinou pomocou funkcie Nájsť & Nahradiť, ktorá funguje dobre pre jednotlivé hodnoty. Ale čo keď máte desiatky alebo dokonca stovky položiek na nahradenie? Určite by nikto nechcel robiť všetky tieto nahradenia ručne po jednom a potom to robiť znova, keď sa údaje zmenia. Našťastie existuje niekoľko efektívnejších metód na hromadné nahradenie v programe Excel akaždú z nich podrobne preskúmame.

    Vyhľadanie a nahradenie viacerých hodnôt pomocou vnoreného SUBSTITUTE

    Najjednoduchší spôsob, ako nájsť a nahradiť viacero položiek v programe Excel, je použiť funkciu SUBSTITUTE.

    Logika vzorca je veľmi jednoduchá: napíšete niekoľko jednotlivých funkcií, ktoré nahradia starú hodnotu novou. A potom tieto funkcie vnoríte jednu do druhej, takže každá nasledujúca funkcia SUBSTITUTE použije výstup predchádzajúcej funkcie SUBSTITUTE na hľadanie ďalšej hodnoty.

    SUBSTITUČNÉ(SUBSTITUČNÉ(SUBSTITUČNÉ( text , old_text1 , new_text1 ), old_text2 , new_text2 ), old_text3 , new_text3 )

    Predpokladajme, že v zozname miest v A2:A10 chcete nahradiť skrátené názvy krajín (ako napr. FR , UK a USA ) s plnými menami.

    Ak to chcete urobiť, zadajte staré hodnoty do polí D2:D4 a nové hodnoty do polí E2:E4, ako je znázornené na nasledujúcej snímke obrazovky. A potom vložte nasledujúci vzorec do políčka B2 a stlačte tlačidlo Enter:

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

    ...a všetky výmeny sa vykonajú naraz:

    Upozorňujeme, že uvedený postup funguje len v Excel 365 ktorý podporuje dynamické polia.

    V preddynamických verziách aplikácie Excel 2019, Excel 2016 a starších je potrebné vzorec napísať pre najvyššiu bunku (B2) a potom ho skopírovať do buniek pod ňou:

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

    Dávajte pozor, že v tomto prípade uzamkneme náhradné hodnoty pomocou absolútnych odkazov na bunky, aby sa pri kopírovaní vzorca nadol neposunuli.

    Poznámka: Funkcia SUBSTITUTE je rozlišovanie veľkých a malých písmen , čo znamená, že by ste mali zadať staré hodnoty ( old_text ) s rovnakými písmenami, ako sú uvedené v pôvodných údajoch.

    Táto metóda je síce jednoduchá, ale má významnú nevýhodu - keď máte desiatky položiek, ktoré treba nahradiť, vnorené funkcie sa stávajú pomerne náročnými na správu.

    Výhody : jednoduchá implementácia; podporovaná vo všetkých verziách programu Excel

    Nevýhody : najlepšie použiť pre obmedzený počet hodnôt find/replace

    Vyhľadávanie a nahradenie viacerých položiek pomocou funkcie XLOOKUP

    V situácii, keď chcete vymeniť celý obsah bunky , nie jeho časť, sa hodí funkcia XLOOKUP.

    Povedzme, že máte zoznam krajín v stĺpci A a chcete nahradiť všetky skratky príslušnými plnými názvami. Podobne ako v predchádzajúcom príklade začnete zadaním položiek "Nájsť" a "Nahradiť" v samostatných stĺpcoch (D a E) a potom zadáte tento vzorec v B2:

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

    Preložené z jazyka Excelu do ľudského jazyka, vzorec robí toto:

    Vyhľadajte hodnotu A2 (lookup_value) v D2:D4 (lookup_array) a vráťte zhodu z E2:E4 (return_array). Ak sa nenájde, vytiahnite pôvodnú hodnotu z A2.

    Dvakrát kliknite na úchytku výplne, aby sa vzorec skopíroval do nasledujúcich buniek, a výsledok vás nenechá čakať:

    Keďže funkcia XLOOKUP je k dispozícii len v programe Excel 365, uvedený vzorec nebude fungovať v starších verziách. Toto správanie však môžete ľahko napodobniť pomocou kombinácie IFERROR alebo IFNA a VLOOKUP:

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

    Poznámka: Na rozdiel od funkcie SUBSTITUTE sú funkcie XLOOKUP a VLOOKUP nerozlišuje veľké a malé písmená , čo znamená, že hľadajú vyhľadané hodnoty bez ohľadu na veľkosť písmen. Napríklad náš vzorec by nahradil obe FR a fr s Francúzsko .

    Výhody : neobvyklé použitie bežných funkcií; funguje vo všetkých verziách programu Excel

    Nevýhody : funguje na úrovni bunky, nemôže nahradiť časť obsahu bunky

    Viacnásobné nahradenie pomocou rekurzívnej funkcie LAMBDA

    Pre predplatiteľov služby Microsoft 365 poskytuje Excel špeciálnu funkciu, ktorá umožňuje vytvárať vlastné funkcie pomocou tradičného jazyka vzorcov. Áno, hovorím o LAMBDA. Krása tejto metódy spočíva v tom, že dokáže previesť veľmi dlhý a zložitý vzorec na veľmi kompaktný a jednoduchý. Navyše umožňuje vytvárať vlastné funkcie, ktoré v Exceli neexistujú, čo bolo predtýmmožné len pomocou VBA.

    Podrobné informácie o vytváraní a používaní vlastných funkcií LAMBDA nájdete v tomto návode: Ako písať funkcie LAMBDA v programe Excel. Tu si rozoberieme niekoľko praktických príkladov.

    Výhody : výsledkom je elegantná a úžasne jednoducho použiteľná funkcia bez ohľadu na počet náhradných párov

    Nevýhody : k dispozícii len v programe Excel 365; je špecifický pre daný zošit a nie je možné ho opätovne použiť v rôznych zošitoch

    Príklad 1. Vyhľadávanie a nahradenie viacerých slov/reťazcov naraz

    Na nahradenie viacerých slov alebo textu v jednom kroku sme vytvorili vlastnú funkciu LAMBDA s názvom MultiReplace , ktorá môže mať jednu z týchto foriem:

    =LAMBDA(text, starý, nový, IF(starý"", MultiReplace(SUBSTITUTE(text, starý, nový), OFFSET(starý, 1, 0), OFFSET(nový, 1, 0)), text))

    Alebo

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

    Obe sú rekurzívne funkcie, ktoré volajú samy seba. Rozdiel je len v spôsobe určenia výstupného bodu.

    V prvom vzorci funkcia IF kontroluje, či starý nie je prázdny (starý""). Ak je TRUE, zoznam MultiReplace Ak sa zavolá funkcia FALSE, funkcia vráti text jeho súčasnú podobu a ukončí ho.

    Druhý vzorec používa opačnú logiku: ak starý je prázdna (old=""), potom vráťte text a ukončite ho; v opačnom prípade zavolajte MultiReplace .

    Najzložitejšia časť je hotová! Zostáva vám len pomenovať MultiReplace funkcie v správcovi názvov, ako je znázornené na obrázku nižšie. Podrobné pokyny nájdete v časti Ako pomenovať funkciu LAMBDA.

    Keď funkcia dostane názov, môžete ju používať rovnako ako akúkoľvek inú vstavanú funkciu.

    Nech už si vyberiete ktorúkoľvek z týchto dvoch variant vzorca, z pohľadu koncového používateľa je syntax jednoduchá:

    MultiReplace(text, starý, nový)

    Kde:

    • Text - zdrojové údaje
    • Staré - hodnoty, ktoré sa majú nájsť
    • Nový - hodnoty, ktoré sa majú nahradiť

    Ak pôjdeme v predchádzajúcom príklade trochu ďalej, nahradíme nielen skratky krajín, ale aj skratky štátov. Na tento účel zadajte skratky ( starý hodnoty) v stĺpci D začínajúcom v D2 a plné názvy ( nový hodnoty) v stĺpci E začínajúcom v E2.

    V položke B2 zadajte funkciu MultiReplace:

    =MultiReplace(A2:A10, D2, E2)

    Stlačte Enter a užite si výsledky :)

    Ako tento vzorec funguje

    Kľúčom k pochopeniu vzorca je pochopenie rekurzie. Môže to znieť zložito, ale princíp je celkom jednoduchý. S každou iteráciou rieši rekurzívna funkcia jeden malý príklad väčšieho problému. V našom prípade je to MultiReplace funkcia prechádza staré a nové hodnoty a pri každom cykle vykoná jednu výmenu:

    MultiReplace (SUBSTITUTE(text, starý, nový), OFFSET(starý, 1, 0), OFFSET(nový, 1, 0))

    Podobne ako pri vnorených funkciách SUBSTITUTE sa výsledok predchádzajúcej funkcie SUBSTITUTE stáva text Inými slovami, pri každom ďalšom volaní funkcie SUBSTITUTE MultiReplace , funkcia SUBSTITUTE nespracúva pôvodný textový reťazec, ale výstup predchádzajúceho volania.

    Ak chcete spracovať všetky položky na starý Zoznam začneme od najvyššej bunky a pomocou funkcie OFFSET sa pri každej interakcii posunieme o 1 riadok nadol:

    OFFSET(old, 1, 0)

    To isté platí aj pre nový zoznam:

    OFFSET(new, 1, 0)

    Rozhodujúce je poskytnúť miesto výstupu aby sa zabránilo nekonečnému rekurzívnemu volaniu. To sa vykonáva pomocou funkcie IF - ak je starý bunka je prázdna, funkcia vráti text jeho súčasnú podobu a výstupy:

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

    alebo

    =LAMBDA(text, starý, nový, IF(starý"", MultiReplace(...), text))

    Príklad 2. Nahradenie viacerých znakov v programe Excel

    V zásade MultiReplace Funkcia, o ktorej sme hovorili v predchádzajúcom príklade, dokáže spracovať aj jednotlivé znaky, ak je každý starý a nový znak zadaný v samostatnej bunke, presne ako skrátené a plné mená na vyššie uvedených snímkach.

    Ak by ste radšej zadali staré znaky do jednej bunky a nové znaky do inej bunky alebo ich napísali priamo do vzorca, môžete vytvoriť ďalšiu vlastnú funkciu s názvom ReplaceChars pomocou jedného z týchto vzorcov:

    =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))

    Alebo

    =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))))

    Nezabudnite svoju novú funkciu Lambda pomenovať v Správcovi názvov ako zvyčajne:

    A vaša nová vlastná funkcia je pripravená na použitie:

    ReplaceChars(text, old_chars, new_chars)

    Kde:

    • Text - pôvodné reťazce
    • Staré - znaky, ktoré sa majú hľadať
    • Nový - znaky, ktoré sa majú nahradiť

    Aby sme to mohli vyskúšať v praxi, urobme niečo, čo sa často vykonáva pri importovaných údajoch - nahraďme inteligentné úvodzovky a inteligentné apostrofy rovnými úvodzovkami a rovnými apostrofmi.

    Najprv do bunky D2 vložíme inteligentné úvodzovky a inteligentný apostrof, do bunky E2 vložíme rovné úvodzovky a rovný apostrof, pričom znaky kvôli lepšej čitateľnosti oddelíme medzerami. (Keďže v oboch bunkách použijeme rovnaký oddeľovač, na výsledok to nebude mať žiadny vplyv - Excel jednoducho nahradí medzeru medzerou.)

    Potom zadáme tento vzorec do B2:

    =ReplaceChars(A2:A4, D2, E2)

    A získali sme presne tie výsledky, ktoré sme hľadali:

    Znaky je možné zadať aj priamo do vzorca. V našom prípade stačí nezabudnúť "zduplikovať" rovné úvodzovky takto:

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

    Ako tento vzorec funguje

    Stránka ReplaceChars funkcia cyklicky prechádza old_chars a new_chars reťazcov a vykoná jednu výmenu za druhou počnúc prvým znakom na ľavej strane. Túto časť vykoná funkcia SUBSTITUTE:

    SUBSTITUTE(text, LEFT(old_chars), LEFT(new_chars))

    Pri každej iterácii funkcia RIGHT odstráni jeden znak z ľavej strany oboch old_chars a new_chars reťazcov, aby LEFT mohol načítať ďalšiu dvojicu znakov na zámenu:

    ReplaceChars(SUBSTITUTE(text, LEFT(old_chars), LEFT(new_chars)), RIGHT(old_chars, LEN(old_chars)-1), RIGHT(new_chars, LEN(new_chars)-1))

    Pred každým rekurzívnym volaním funkcia IF vyhodnotí old_chars Ak nie je reťazec prázdny, funkcia zavolá samú seba. Hneď ako sa nahradí posledný znak, proces iterácie sa ukončí a vzorec vráti text jeho súčasnú podobu a výstupy.

    Poznámka: Pretože funkcia SUBSTITUTE používaná v našich základných vzorcoch je rozlišovanie veľkých a malých písmen , obe lambdy ( MultiReplace a ReplaceChars ) považujú veľké a malé písmená za rôzne znaky.

    Hromadné vyhľadávanie a nahrádzanie pomocou UDF

    V prípade, že funkcia LAMBDA nie je v programe Excel k dispozícii, môžete napísať používateľom definovanú funkciu pre viacnásobné nahradenie tradičným spôsobom pomocou VBA.

    Na odlíšenie UDF od LAMBDA-definovaného MultiReplace funkciu pomenujeme inak, napr. MassReplace Kód funkcie je nasledujúci:

    Function MassReplace(InputRng As Range, FindRng As Range, ReplaceRng As Range) As Variant () Dim arRes() As Variant 'pole na uloženie výsledkov Dim arSearchReplace(), sTmp As String 'pole, kde sa uložia páry find/replace, dočasný reťazec Dim iFindCurRow, cntFindRows As Long 'index aktuálneho riadku poľa SearchReplace, počet riadkov Dim iInputCurRow, iInputCurCol, cntInputRows,cntInputCols As Long 'index aktuálneho riadku v zdrojovom rozsahu, index aktuálneho stĺpca v zdrojovom rozsahu, počet riadkov, počet stĺpcov 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) 'príprava poľa dvojíc find/replace ForiFindCurRow = 1 To cntFindRows arSearchReplace(iFindCurRow, 1) = FindRng.Cells(iFindCurRow, 1).Value arSearchReplace(iFindCurRow, 2) = ReplaceRng.Cells(iFindCurRow, 1).Value Next 'Vyhľadávanie a nahrádzanie v zdrojovom rozsahu For iInputCurRow = 1 To cntInputRows For iInputCurCol = 1 To cntInputCols sTmp = InputRng.Cells(iInputCurRow, iInputCurCol).Value 'Nahradenie všetkých párov find/replace v každej bunkeFor iFindCurRow = 1 To cntFindRows sTmp = Replace(sTmp, arSearchReplace(iFindCurRow, 1), arSearchReplace(iFindCurRow, 2)) Next arRes(iInputCurRow, iInputCurCol) = sTmp Next Next MassReplace = arRes End Function

    Podobne ako funkcie definované v LAMBDA, aj UDF sú celý zošit To znamená. MassReplace Funkcia bude fungovať len v zošite, do ktorého ste vložili kód. Ak si nie ste istí, ako to urobiť správne, postupujte podľa krokov opísaných v časti Ako vložiť kód VBA v programe Excel.

    Po pridaní kódu do zošita sa funkcia zobrazí v intellisense vzorca - iba názov funkcie, nie argumenty! Aj keď verím, že nie je veľký problém zapamätať si syntax:

    MassReplace(input_range, find_range, replace_range)

    Kde:

    • Input_range - zdrojový rozsah, v ktorom chcete nahradiť hodnoty.
    • Find_range - znaky, reťazce alebo slová, ktoré sa majú vyhľadať.
    • Replace_range - znaky, reťazce alebo slová, ktoré sa majú nahradiť.

    V programe Excel 365 to vďaka podpore dynamických polí funguje ako bežný vzorec, ktorý stačí zadať do hornej bunky (B2):

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

    V preddynamickom programe Excel to funguje ako vzorec starého typu CSE: vyberiete celý zdrojový rozsah (B2:B10), zadáte vzorec a stlačíte súčasne klávesy Ctrl + Shift + Enter, aby ste ho dokončili.

    Výhody : slušná alternatíva k vlastnej funkcii LAMBDA v aplikáciách Excel 2019, Excel 2016 a starších verziách

    Nevýhody : zošit musí byť uložený ako súbor .xlsm s podporou makier

    Hromadné nahradenie v programe Excel pomocou makra VBA

    Ak radi automatizujete bežné úlohy pomocou makier, môžete použiť nasledujúci kód VBA na vyhľadanie a nahradenie viacerých hodnôt v rozsahu.

    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

    Ak chcete makro ihneď používať, môžete si stiahnuť náš vzorový zošit obsahujúci kód. Alebo môžete kód vložiť do vlastného zošita.

    Ako používať makro

    Pred spustením makra zadajte staré a nové hodnoty do dvoch susedných stĺpcov, ako je znázornené na obrázku nižšie (C2:D4).

    Potom vyberte zdrojové údaje, stlačte klávesovú skratku Alt + F8 , vyberte BulkReplace a kliknite na tlačidlo Spustiť .

    Ako zdroj hnev je predvolený, stačí overiť odkaz a kliknúť na tlačidlo OK:

    Potom vyberte nahradiť rozsah a kliknite na tlačidlo OK:

    Hotovo!

    Výhody : nastavenie raz, opakované použitie kedykoľvek

    Nevýhody : makro sa musí spustiť pri každej zmene údajov

    Viacnásobné nájdenie a nahradenie v programe Excel pomocou nástroja Substring

    Hneď v prvom príklade som spomenul, že vnorené SUBSTITUTE je najjednoduchší spôsob nahradenia viacerých hodnôt v programe Excel. Priznávam, že som sa mýlil. Vďaka nášmu balíku Ultimate Suite je to ešte jednoduchšie!

    Ak chcete vykonať hromadnú výmenu v pracovnom hárku, prejdite do Údaje Ablebits a kliknite na kartu Nástroje na vytváranie podreťazcov > Nahradiť podreťazce .

    Stránka Nahradiť podreťazce sa zobrazí dialógové okno s požiadavkou na definovanie Zdroj rozsah a Podreťazce rozsah.

    Keď sú tieto dva rozsahy vybrané, kliknite na Vymeňte stránku a výsledky nájdete v novom stĺpci vloženom napravo od pôvodných údajov. Áno, je to také jednoduché!

    Tip. Pred kliknutím na Vymeňte stránku , je tu jedna dôležitá vec, ktorú by ste mali zvážiť - Rozlišovanie veľkých a malých písmen Nezabudnite ju vybrať, ak chcete veľké a malé písmená spracovať ako rôzne znaky. V tomto príklade túto možnosť zaškrtneme, pretože chceme nahradiť len reťazce s veľkými písmenami a podreťazce ako "fr", "uk" alebo "ak" v rámci iných slov ponechať nedotknuté.

    Ak ste zvedaví, aké ďalšie hromadné operácie možno vykonávať s reťazcami, pozrite si ďalšie nástroje Substring Tools, ktoré sú súčasťou nášho balíka Ultimate Suite. Alebo ešte lepšie, stiahnite si skúšobnú verziu nižšie a vyskúšajte ju!

    To je spôsob, ako v programe Excel nájsť a nahradiť viacero slov a znakov naraz. Ďakujem vám za prečítanie a dúfam, že sa na našom blogu uvidíme budúci týždeň!

    Dostupné súbory na stiahnutie

    Viacnásobné nájdenie a nahradenie v programe Excel (.xlsm súbor)

    14-dňová plne funkčná verzia balíka Ultimate Suite (.exe súbor)

    Michael Brown je nadšený technologický nadšenec s vášňou pre zjednodušovanie zložitých procesov pomocou softvérových nástrojov. S viac ako desaťročnými skúsenosťami v technologickom priemysle si zdokonalil svoje zručnosti v programoch Microsoft Excel a Outlook, ako aj Tabuľky Google a Dokumenty. Michaelov blog je venovaný zdieľaniu svojich vedomostí a odborných znalostí s ostatnými a poskytuje jednoduché tipy a návody na zlepšenie produktivity a efektivity. Či už ste skúsený profesionál alebo začiatočník, Michaelov blog ponúka cenné poznatky a praktické rady, ako z týchto základných softvérových nástrojov vyťažiť maximum.