Excel: vyhledání a nahrazení více hodnot najednou

  • Sdílet Toto
Michael Brown

V tomto návodu se podíváme na několik způsobů vyhledávání a nahrazování více slov, řetězců nebo jednotlivých znaků, abyste si mohli vybrat ten, který nejlépe vyhovuje vašim potřebám.

Jak lidé obvykle vyhledávají v Excelu? Většinou pomocí funkce Najít & nahradit, která funguje dobře pro jednotlivé hodnoty. Ale co když máte desítky nebo dokonce stovky položek, které je třeba nahradit? Nikdo by jistě nechtěl všechny tyto náhrady provádět ručně jednu po druhé a pak to dělat znovu, když se data změní. Naštěstí existuje několik efektivnějších metod hromadného nahrazování v Excelu a topodrobně prozkoumáme každou z nich.

    Hledání a nahrazování více hodnot pomocí vnořeného SUBSTITUTE

    Nejjednodušší způsob, jak v aplikaci Excel najít a nahradit více položek, je použít funkci SUBSTITUTE.

    Logika vzorce je velmi jednoduchá: napíšete několik jednotlivých funkcí, které nahradí starou hodnotu novou. A pak tyto funkce vnoříte jednu do druhé, takže každá následující funkce SUBSTITUTE použije výstup předchozí funkce SUBSTITUTE pro hledání další hodnoty.

    SUBSTITUT(SUBSTITUT(SUBSTITUT( text , old_text1 , new_text1 ), old_text2 , new_text2 ), old_text3 , new_text3 )

    Předpokládejme, že v seznamu míst v A2:A10 chcete nahradit zkrácené názvy zemí (jako např. FR , UK a USA ) s plnými jmény.

    Chcete-li to provést, zadejte staré hodnoty do polí D2:D4 a nové hodnoty do polí E2:E4, jak je znázorněno na obrázku níže. A poté vložte níže uvedený vzorec do pole B2 a stiskněte klávesu Enter:

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

    ...a všechny výměny budou provedeny najednou:

    Vezměte prosím na vědomí, že výše uvedený postup funguje pouze v Excel 365 který podporuje dynamická pole.

    V předdynamických verzích aplikace Excel 2019, Excel 2016 a starších je třeba vzorec napsat pro nejvyšší buňku (B2) a poté zkopírovat do nižších buněk:

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

    Věnujte prosím pozornost tomu, že v tomto případě uzamkneme náhradní hodnoty pomocí absolutních odkazů na buňky, takže se při kopírování vzorce dolů neposunou.

    Poznámka: Funkce SUBSTITUTE je rozlišování velkých a malých písmen , což znamená, že byste měli zadat staré hodnoty ( old_text ) ve stejných písmenech, jaká jsou uvedena v původních údajích.

    Tato metoda je sice snadná, ale má jednu podstatnou nevýhodu - když máte desítky položek, které je třeba nahradit, vnořené funkce se stávají poměrně obtížně zvládnutelnými.

    Výhody : snadná implementace; podporováno ve všech verzích aplikace Excel

    Nevýhody : nejlépe pro omezený počet hodnot find/replace

    Hledání a nahrazení více položek pomocí funkce XLOOKUP

    V situaci, kdy chcete vyměnit celý obsah buňky , nikoliv jeho část, se hodí funkce XLOOKUP.

    Řekněme, že máte seznam zemí ve sloupci A a chcete nahradit všechny zkratky odpovídajícími plnými názvy. Stejně jako v předchozím příkladu začnete zadáním položek "Najít" a "Nahradit" v samostatných sloupcích (D, resp. E) a poté zadáte tento vzorec v B2:

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

    Přeloženo z jazyka Excelu do lidské řeči, vzorec funguje takto:

    Vyhledejte hodnotu A2 (lookup_value) v D2:D4 (lookup_array) a vraťte shodu z E2:E4 (return_array). Pokud není nalezena, vytáhněte původní hodnotu z A2.

    Poklepáním na úchyt výplně se vzorec zkopíruje do níže uvedených buněk a výsledek na sebe nenechá čekat:

    Vzhledem k tomu, že funkce XLOOKUP je k dispozici pouze v aplikaci Excel 365, nebude výše uvedený vzorec fungovat ve starších verzích. Toto chování však můžete snadno napodobit pomocí kombinace IFERROR nebo IFNA a VLOOKUP:

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

    Poznámka: Na rozdíl od funkce SUBSTITUTE jsou funkce XLOOKUP a VLOOKUP. nerozlišuje velká a malá písmena , což znamená, že hledají vyhledávané hodnoty bez ohledu na velikost písmen. Například náš vzorec by nahradil obě hodnoty. FR a fr s Francie .

    Výhody : neobvyklé použití obvyklých funkcí; funguje ve všech verzích aplikace Excel

    Nevýhody : funguje na úrovni buněk, nemůže nahradit část obsahu buňky

    Vícenásobné nahrazení pomocí rekurzivní funkce LAMBDA

    Pro předplatitele služby Microsoft 365 poskytuje Excel speciální funkci, která umožňuje vytvářet vlastní funkce pomocí tradičního jazyka vzorců. Ano, mluvím o LAMBDA. Krása této metody spočívá v tom, že dokáže převést velmi dlouhý a složitý vzorec na velmi kompaktní a jednoduchý. Navíc umožňuje vytvářet vlastní funkce, které v Excelu neexistují, což bylo dřívemožné pouze pomocí VBA.

    Podrobné informace o vytváření a používání vlastních funkcí LAMBDA naleznete v tomto návodu: Jak psát funkce LAMBDA v aplikaci Excel. Zde probereme několik praktických příkladů.

    Výhody : výsledkem je elegantní a překvapivě snadno použitelná funkce bez ohledu na počet párů náhradníků.

    Nevýhody : k dispozici pouze v aplikaci Excel 365; je specifický pro daný sešit a nelze jej opakovaně použít v různých sešitech.

    Příklad 1. Hledání a nahrazování více slov / řetězců najednou

    Pro nahrazení více slov nebo textu najednou jsme vytvořili vlastní funkci LAMBDA s názvem MultiReplace , která může mít jednu z těchto podob:

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

    Nebo

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

    Obě jsou rekurzivní funkce, které volají samy sebe. Rozdíl je pouze v tom, jak je stanoven výstupní bod.

    V prvním vzorci funkce IF zkontroluje, zda je v položce starý není prázdný (starý""). Pokud je TRUE, je seznam MultiReplace Pokud je volána funkce FALSE, funkce vrací hodnotu text jeho současnou podobu a ukončí ji.

    Druhý vzorec používá obrácenou logiku: jestliže starý je prázdná (old=""), pak se vrátí text a ukončete ji; v opačném případě zavolejte MultiReplace .

    To nejsložitější je hotovo! Zbývá vám jen pojmenovat MultiReplace funkce ve Správci názvů, jak je znázorněno na obrázku níže. Podrobné pokyny naleznete v části Jak pojmenovat funkci LAMBDA.

    Jakmile funkce dostane název, můžete ji používat stejně jako jakoukoli jinou vestavěnou funkci.

    Ať už si vyberete kteroukoli z těchto dvou variant vzorce, z hlediska koncového uživatele je syntaxe jednoduchá:

    MultiReplace(text, starý, nový)

    Kde:

    • Text - zdrojová data
    • Starý - hodnoty k nalezení
    • Nový - hodnoty, které se mají nahradit

    Vezmeme-li předchozí příklad trochu dále, nahradíme nejen zkratky zemí, ale také zkratky států. Za tímto účelem zadejte zkratky ( starý hodnoty) ve sloupci D začínajícím v D2 a plné názvy ( nový hodnoty) ve sloupci E počínaje E2.

    V okně B2 zadejte funkci MultiReplace:

    =MultiReplace(A2:A10, D2, E2)

    Stiskněte Enter a užijte si výsledky :)

    Jak tento vzorec funguje

    Klíčem k pochopení vzorce je pochopení rekurze. Může to znít složitě, ale princip je poměrně jednoduchý. S každou iterací řeší rekurzivní funkce jednu malou instanci většího problému. V našem případě je to rekurze. MultiReplace funkce prochází ve smyčce staré a nové hodnoty a v každé smyčce provede jednu výměnu:

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

    Stejně jako u vnořených funkcí SUBSTITUTE se výsledek předchozí funkce SUBSTITUTE stává výsledkem funkce SUBSTITUTE. text jinými slovy, při každém dalším volání příkazu SUBSTITUTE. MultiReplace , funkce SUBSTITUTE nezpracovává původní textový řetězec, ale výstup předchozího volání.

    Chcete-li zpracovat všechny položky na starý začínáme od nejvyšší buňky a pomocí funkce OFFSET se při každé interakci posuneme o 1 řádek dolů:

    OFFSET(old, 1, 0)

    Totéž platí pro nový seznam:

    OFFSET(new, 1, 0)

    Zásadní je poskytnout místo výstupu zabránit tomu, aby rekurzivní volání probíhala donekonečna. To se provádí pomocí funkce IF - pokud je v položce starý je buňka prázdná, funkce vrátí text jeho současná podoba a výstupy:

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

    nebo

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

    Příklad 2. Nahrazení více znaků v aplikaci Excel

    V zásadě platí, že MultiReplace Funkce popsaná v předchozím příkladu dokáže pracovat i s jednotlivými znaky, pokud je každý starý a nový znak zadán do samostatné buňky, přesně jako zkrácená a plná jména na výše uvedených snímcích.

    Pokud byste raději zadali staré znaky do jedné buňky a nové znaky do jiné buňky nebo je zadali přímo do vzorce, můžete vytvořit další vlastní funkci s názvem ReplaceChars , pomocí jednoho z těchto vzorců:

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

    Nebo

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

    Nezapomeňte novou funkci Lambda pojmenovat ve Správci názvů jako obvykle:

    A vaše nová vlastní funkce je připravena k použití:

    ReplaceChars(text, old_chars, new_chars)

    Kde:

    • Text - původní řetězce
    • Starý - znaky, které se mají hledat
    • Nový - znaky, které se mají nahradit

    Abychom si to vyzkoušeli v praxi, provedeme něco, co se často provádí u importovaných dat - nahradíme inteligentní uvozovky a inteligentní apostrofy rovnými uvozovkami a rovnými apostrofy.

    Nejprve zadáme do buňky D2 inteligentní uvozovky a inteligentní apostrof, do buňky E2 rovné uvozovky a rovný apostrof, přičemž pro lepší čitelnost oddělíme znaky mezerami. (Protože v obou buňkách použijeme stejný oddělovač, nebude to mít na výsledek žádný vliv - Excel pouze nahradí mezeru mezerou.)

    Poté zadáme tento vzorec do pole B2:

    =ReplaceChars(A2:A4, D2, E2)

    A získat přesně takové výsledky, jaké jsme hledali:

    Znaky je také možné zadat přímo do vzorce. V našem případě stačí nezapomenout "zdvojit" rovné uvozovky takto:

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

    Jak tento vzorec funguje

    Na stránkách ReplaceChars funkce prochází cykly old_chars a new_chars řetězců a provádí postupně jednu náhradu za druhou, počínaje prvním znakem vlevo. Tuto část provádí funkce SUBSTITUTE:

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

    Při každé iteraci funkce RIGHT oddělí jeden znak z levé strany obou znaků. old_chars a new_chars řetězců, aby mohl LEFT načíst další dvojici znaků pro záměnu:

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

    Před každým rekurzivním voláním funkce IF vyhodnotí hodnotu old_chars Pokud není prázdný, funkce zavolá sama sebe. Jakmile je nahrazen poslední znak, proces iterace skončí a vzorec se vrátí. text jeho současná podoba a výstupy.

    Poznámka: Protože funkce SUBSTITUTE používaná v našich základních vzorcích je rozlišování velkých a malých písmen , obě lambdy ( MultiReplace a ReplaceChars ) považují velká a malá písmena za různé znaky.

    Hromadné vyhledání a nahrazení pomocí UDF

    V případě, že funkce LAMBDA není v Excelu k dispozici, můžete si napsat uživatelsky definovanou funkci pro vícenásobné nahrazení tradičním způsobem pomocí VBA.

    Pro odlišení UDF od LAMBDA definovaného MultiReplace funkci pojmenujeme jinak, např. MassReplace Kód funkce je následující:

    Function MassReplace(InputRng As Range, FindRng As Range, ReplaceRng As Range) As Variant () Dim arRes() As Variant 'pole pro uložení výsledků Dim arSearchReplace(), sTmp As String 'pole, kam se ukládají páry find/replace, dočasný řetězec Dim iFindCurRow, cntFindRows As Long 'index aktuálního řádku pole SearchReplace, počet řádků Dim iInputCurRow, iInputCurCol, cntInputRows,cntInputCols As Long 'index aktuálního řádku ve zdrojovém rozsahu, index aktuálního sloupce ve zdrojovém rozsahu, počet řádků, počet sloupců 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) 'příprava pole dvojic find/replace ForiFindCurRow = 1 To cntFindRows arSearchReplace(iFindCurRow, 1) = FindRng.Cells(iFindCurRow, 1).Value arSearchReplace(iFindCurRow, 2) = ReplaceRng.Cells(iFindCurRow, 1).Value Next 'Hledání a nahrazování ve zdrojovém rozsahu For iInputCurRow = 1 To cntInputRows For iInputCurCol = 1 To cntInputCols sTmp = InputRng.Cells(iInputCurRow, iInputCurCol).Value 'Nahrazení všech dvojic find/replace v každé buňceFor iFindCurRow = 1 To cntFindRows sTmp = Replace(sTmp, arSearchReplace(iFindCurRow, 1), arSearchReplace(iFindCurRow, 2)) Next arRes(iInputCurRow, iInputCurCol) = sTmp Next Next MassReplace = arRes End Function

    Stejně jako funkce definované v nástroji LAMBDA jsou i UDF celý sešit To znamená, že MassReplace Funkce bude fungovat pouze v sešitě, do kterého jste vložili kód. Pokud si nejste jisti, jak to správně provést, postupujte podle kroků popsaných v části Jak vložit kód VBA v aplikaci Excel.

    Po přidání kódu do sešitu se funkce zobrazí v intellisense vzorců - pouze název funkce, nikoli argumenty! I když věřím, že není problém si syntaxi zapamatovat:

    MassReplace(input_range, find_range, replace_range)

    Kde:

    • Input_range - zdrojový rozsah, ve kterém chcete nahradit hodnoty.
    • Find_range - znaky, řetězce nebo slova, které se mají vyhledat.
    • Replace_range - znaky, řetězce nebo slova, kterými se mají nahradit.

    V aplikaci Excel 365 to díky podpoře dynamických polí funguje jako běžný vzorec, který je třeba zadat pouze do horní buňky (B2):

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

    V předdynamickém Excelu to funguje jako vzorec pole CSE starého typu: vyberete celý zdrojový rozsah (B2:B10), zadáte vzorec a stisknete současně klávesy Ctrl + Shift + Enter, abyste jej dokončili.

    Výhody : slušná alternativa k vlastní funkci LAMBDA v Excelu 2019, Excelu 2016 a starších verzích

    Nevýhody : sešit musí být uložen jako soubor .xlsm s povolenými makry.

    Hromadné nahrazení v aplikaci Excel pomocí makra VBA

    Pokud rádi automatizujete běžné úlohy pomocí maker, můžete použít následující kód VBA k vyhledání a nahrazení více hodnot 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

    Chcete-li makro ihned používat, můžete si stáhnout náš ukázkový sešit obsahující kód. Nebo můžete kód vložit do vlastního sešitu.

    Jak používat makro

    Před spuštěním makra zadejte staré a nové hodnoty do dvou sousedních sloupců, jak je znázorněno na obrázku níže (C2:D4).

    A pak vyberte zdrojová data, stiskněte Alt + F8 , vyberte položku BulkReplace a klikněte na tlačítko Spusťte .

    Jako zdroj hněvu je předvybrána, stačí ověřit odkaz a kliknout na tlačítko OK:

    Poté vyberte nahradit rozsah a klikněte na tlačítko OK:

    Hotovo!

    Výhody : jednou nastavit, kdykoli znovu použít

    Nevýhody : makro je třeba spustit při každé změně dat

    Vícenásobné vyhledávání a nahrazování v aplikaci Excel pomocí nástroje Substring

    Hned v prvním příkladu jsem se zmínil, že vnořený SUBSTITUTE je nejjednodušší způsob, jak v Excelu nahradit více hodnot. Přiznávám, že jsem se mýlil. Naše sada Ultimate Suite vše ještě více usnadňuje!

    Chcete-li v pracovním listu provést hromadné nahrazení, přejděte na stránku Data Ablebits a klikněte na kartu Nástroje pro práci s podřetězci > Nahrazení podřetězců .

    Na stránkách Nahrazení podřetězců Zobrazí se dialogové okno s žádostí o definici Zdroj: rozsah a Podřetězce rozsah.

    Když jsou oba rozsahy vybrány, klikněte na tlačítko Vyměňte stránky a výsledky najdete v novém sloupci vloženém napravo od původních dat. Ano, je to tak snadné!

    Tip. Před kliknutím na Vyměňte stránky , je tu jedna důležitá věc, kterou byste měli vzít v úvahu -. Rozlišování velkých a malých písmen Nezapomeňte ji zaškrtnout, pokud chcete velká a malá písmena zpracovávat jako různé znaky. V tomto příkladu tuto možnost zaškrtneme, protože chceme nahradit pouze řetězce s velkými písmeny a podřetězce jako "fr", "uk" nebo "ak" v rámci jiných slov ponechat nedotčené.

    Pokud vás zajímá, jaké další hromadné operace lze provádět s řetězci, podívejte se na další nástroje Substring Tools, které jsou součástí naší sady Ultimate Suite. Nebo ještě lépe, stáhněte si níže uvedenou zkušební verzi a vyzkoušejte ji!

    To je návod, jak v Excelu najít a nahradit více slov a znaků najednou. Děkuji vám za přečtení a doufám, že se příští týden uvidíme na našem blogu!

    Dostupné soubory ke stažení

    Vícenásobné vyhledávání a nahrazování v aplikaci Excel (.xlsm soubor)

    Ultimate Suite 14denní plně funkční verze (.exe soubor)

    Michael Brown je oddaný technologický nadšenec s vášní pro zjednodušování složitých procesů pomocí softwarových nástrojů. S více než desetiletými zkušenostmi v technologickém průmyslu zdokonalil své dovednosti v aplikacích Microsoft Excel a Outlook a také v Tabulkách a Dokumentech Google. Michaelův blog je věnován sdílení jeho znalostí a odborných znalostí s ostatními a poskytuje snadno pochopitelné tipy a návody pro zlepšení produktivity a efektivity. Ať už jste zkušený profesionál nebo začátečník, Michaelův blog nabízí cenné postřehy a praktické rady, jak tyto základní softwarové nástroje co nejlépe využít.