Odstránenie textu pred, za alebo medzi dvoma znakmi v programe Excel

  • Zdieľajte To
Michael Brown

V posledných niekoľkých článkoch sme sa zaoberali rôznymi spôsobmi odstraňovania znakov z reťazcov v programe Excel. Dnes preskúmame ešte jeden prípad použitia - ako odstrániť všetko pred alebo za konkrétnym znakom.

    Odstránenie textu pred, za alebo medzi 2 znakmi pomocou Find & Replace

    Na manipuláciu s údajmi vo viacerých bunkách je vhodným nástrojom funkcia Nájsť a nahradiť. Ak chcete odstrániť časť reťazca, ktorý predchádza alebo nasleduje po určitom znaku, vykonajte tieto kroky:

    1. Vyberte všetky bunky, v ktorých chcete odstrániť text.
    2. Stlačením klávesovej skratky Ctrl + H otvoríte Nájsť a nahradiť dialóg.
    3. V Zistite, čo zadajte jednu z nasledujúcich kombinácií:
      • Odstránenie textu pred daným znakom , zadajte znak, ktorému predchádza hviezdička (*char).
      • Odstránenie textu podľa určitého znaku , zadajte znak, za ktorým nasleduje hviezdička (char*).
      • Odstránenie podreťazca medzi dvoma znakmi , zadajte hviezdičku obklopenú 2 znakmi (char*char).
    4. Nechajte Vymeňte stránku s políčko prázdne.
    5. Kliknite na . Vymeňte všetky .

    Napríklad na odstránenie všetko za čiarkou vrátane samotnej čiarky, vložte čiarku a znak hviezdičky (,*) do Zistite, čo a dostanete nasledujúci výsledok:

    Odstránenie podreťazca pred čiarkou , zadajte hviezdičku, čiarku a medzeru (*, ) do políčka Zistite, čo box.

    Všimnite si, že nenahrádzame len čiarku, ale čiarka a medzera aby ste zabránili vzniku úvodných medzier vo výsledkoch. Ak sú vaše údaje oddelené čiarkami bez medzier, použite hviezdičku nasledovanú čiarkou (*,).

    Odstránenie textu medzi dvoma čiarkami , použite hviezdičku obklopenú čiarkami (,*,).

    Tip: Ak chcete, aby boli mená a telefónne čísla oddelené čiarkou, zadajte čiarku (,) do políčka Nahradiť oblasť.

    Odstránenie časti textu pomocou funkcie Flash Fill

    V moderných verziách programu Excel (2013 a novšie) existuje ešte jeden jednoduchý spôsob, ako vymazať text, ktorý predchádza alebo nasleduje po určitom znaku - funkcia Flash Fill (Bleskové vyplnenie). Tu je uvedené, ako to funguje:

    1. Do bunky vedľa prvej bunky s údajmi napíšte očakávaný výsledok a stlačte kláves Enter .
    2. Začnite písať vhodnú hodnotu do ďalšej bunky. Keď Excel pocíti vzor v zadávaných hodnotách, zobrazí náhľad na zvyšné bunky podľa rovnakého vzoru.
    3. Stlačením tlačidla Enter prijmite návrh.

    Hotovo!

    Odstránenie textu pomocou vzorcov

    V programe Microsoft Excel možno mnohé manipulácie s údajmi vykonávané pomocou vstavaných funkcií vykonať aj pomocou vzorca. Na rozdiel od predchádzajúcich metód vzorce nevykonávajú žiadne zmeny pôvodných údajov a poskytujú väčšiu kontrolu nad výsledkami.

    Ako odstrániť všetko po určitom znaku

    Ak chcete odstrániť text za konkrétnym znakom, všeobecný vzorec je:

    LEFT( bunka , SEARCH(" znak ", bunka ) -1)

    V tomto prípade použijeme funkciu SEARCH na získanie pozície znaku a odovzdáme ju funkcii LEFT, aby vybrala príslušný počet znakov zo začiatku reťazca. Od čísla vráteného funkciou SEARCH sa odpočíta jeden znak, aby sa z výsledkov vylúčil oddeľovač.

    Ak chcete napríklad odstrániť časť reťazca za čiarkou, zadajte nasledujúci vzorec do B2 a potiahnite ho nadol cez B7:

    =LEFT(A2, SEARCH(",", A2) -1)

    Ako odstrániť všetko pred konkrétnym znakom

    Ak chcete odstrániť časť textového reťazca pred určitým znakom, všeobecný vzorec je:

    PRAVDA( bunka , LEN( bunka ) - VYHĽADAŤ(" znak ", bunka ))

    Tu opäť vypočítame pozíciu cieľového znaku pomocou funkcie SEARCH, odpočítame ju od celkovej dĺžky reťazca vrátenej funkciou LEN a rozdiel odovzdáme funkcii RIGHT, aby vytiahla tento počet znakov z konca reťazca.

    Ak chcete napríklad odstrániť text pred čiarkou, vzorec je:

    =RIGHT(A2, LEN(A2) - SEARCH(",", A2)

    V našom prípade za čiarkou nasleduje znak medzera. Aby sme sa vyhli úvodným medzerám vo výsledkoch, obalíme základný vzorec funkciou TRIM:

    =TRIM(RIGHT(A2, LEN(A2) - SEARCH(",", A2))

    Poznámky:

    • Oba uvedené príklady predpokladajú, že existuje len jeden prípad oddeľovača v pôvodnom reťazci. Ak sa vyskytuje viacero výskytov, text sa odstráni pred/za prvý prípad .
    • Funkcia VYHĽADÁVANIE je nerozlišuje veľké a malé písmená , čo znamená, že nerozlišuje medzi malými a veľkými písmenami. Ak je konkrétnym znakom písmeno a chcete rozlišovať veľkosť písmena, použite príkaz rozlišovanie veľkých a malých písmen Funkcia FIND namiesto funkcie SEARCH.

    Ako odstrániť text po N-tom výskyte znaku

    V situácii, keď zdrojový reťazec obsahuje viacero inštancií oddeľovača, môžete mať potrebu odstrániť text za konkrétnou inštanciou. Na tento účel použite nasledujúci vzorec:

    LEFT( bunka , FIND("#", SUBSTITUTE( bunka , " znak ", "#", n )) -1)

    Kde n je výskyt znaku, po ktorom sa má text odstrániť.

    Vnútorná logika tohto vzorca vyžaduje použitie nejakého znaku, ktorý sa nikde v zdrojových údajoch nenachádza, v našom prípade je to symbol hash (#). Ak sa tento znak vo vašom súbore údajov vyskytuje, použite namiesto "#" niečo iné.

    Napríklad na odstránenie všetkého za druhou čiarkou v A2 (a samotnej čiarky) sa použije vzorec:

    =LEFT(A2, FIND("#", SUBSTITUTE(A2, ",", "#", 2)) -1)

    Ako tento vzorec funguje:

    Kľúčovou časťou vzorca je funkcia FIND, ktorá vypočíta pozíciu n-tého oddeľovača (v našom prípade čiarky). Tu je uvedený postup:

    Pomocou funkcie SUBSTITUTE nahradíme 2. čiarku v A2 symbolom hash (alebo iným znakom, ktorý sa v údajoch nenachádza):

    SUBSTITUTE(A2, ",", "#", 2)

    Výsledný reťazec ide do 2. argumentu FIND, takže nájde pozíciu "#" v tomto reťazci:

    FIND("#", "Emma, Design# (102) 123-4568")

    FIND nám hovorí, že "#" je 13. znak v reťazci. Ak chcete zistiť počet znakov, ktoré mu predchádzajú, stačí odčítať 1 a dostanete výsledok 12:

    FIND("#", SUBSTITUTE(A2, ",", "#", 2)) - 1

    Toto číslo smeruje priamo do num_chars argument LEFT, ktorý žiada, aby sa vytiahlo prvých 12 znakov z A2:

    =LEFT(A2, 12)

    To je všetko!

    Ako odstrániť text pred N-tým výskytom znaku

    Všeobecný vzorec na odstránenie podreťazca pred určitým znakom je:

    VPRAVO(SUBSTITUTE( bunka , " znak ", "#", n ), LEN( bunka ) - FIND("#", SUBSTITUTE( bunka , " znak ", "#", n )) -1)

    Ak chcete napríklad odstrániť text pred druhou čiarkou v A2, vzorec je:

    =RIGHT(SUBSTITUTE(A2, ",", "#", 2), LEN(A2) - FIND("#", SUBSTITUTE(A2, ",", "#", 2) -1)

    Na odstránenie úvodnej medzery opäť použijeme funkciu TRIM ako obal:

    =TRIM(RIGHT(SUBSTITUTE(A2, ",", "#", 2), LEN(A2) - FIND("#", SUBSTITUTE(A2, ",", "#", 2))))

    Ako tento vzorec funguje:

    V súhrne zistíme, koľko znakov sa nachádza za n-tým oddeľovačom, a z pravej strany extrahujeme podreťazec zodpovedajúcej dĺžky. Nižšie je uvedený rozpis vzorca:

    Najprv nahradíme druhú čiarku v A2 symbolom hash:

    SUBSTITUTE(A2, ",", "#", 2)

    Výsledný reťazec sa prenesie do text argument PRÁVA:

    RIGHT("Emma, Design# (102) 123-4568", ...

    Ďalej musíme definovať, koľko znakov sa má z konca reťazca extrahovať. Na tento účel zistíme pozíciu hash symbolu vo vyššie uvedenom reťazci (čo je 13):

    FIND("#", SUBSTITUTE(A2, ",", "#", 2))

    A odpočítajte ju od celkovej dĺžky reťazca (ktorá sa rovná 28):

    LEN(A2) - FIND("#", SUBSTITUTE(A2, ",", "#", 2))

    Rozdiel (15) sa prenesie do druhého argumentu RIGHT a prikáže mu vytiahnuť posledných 15 znakov z reťazca v prvom argumente:

    RIGHT("Emma, Design# (102) 123-4568", 15)

    Výstupom je podreťazec "(102) 123-4568", ktorý je veľmi blízky požadovanému výsledku, až na úvodnú medzeru. Preto použijeme funkciu TRIM, aby sme sa jej zbavili.

    Ako odstrániť text po poslednom výskyte znaku

    V prípade, že sú vaše hodnoty oddelené rôznym počtom oddeľovačov, možno budete chcieť odstrániť všetko, čo sa nachádza za posledným prípadom tohto oddeľovača. To môžete urobiť pomocou nasledujúceho vzorca:

    LEFT( bunka , FIND("#", SUBSTITUTE( bunka , " znak ", "#", LEN( bunka ) - LEN(SUBSTITUTE( bunka , " znak ", "")))) -1)

    Predpokladajme, že stĺpec A obsahuje rôzne informácie o zamestnancoch, ale hodnota za poslednou čiarkou je vždy telefónne číslo. Vaším cieľom je odstrániť telefónne čísla a zachovať všetky ostatné údaje.

    Na dosiahnutie cieľa môžete odstrániť text za poslednou čiarkou v A2 pomocou tohto vzorca:

    =LEFT(A2, FIND("#", SUBSTITUTE(A2, ",", "#", LEN(A2) - LEN(SUBSTITUTE(A2, ",","")))) -1)

    Skopírujte vzorec do stĺpca a dostanete tento výsledok:

    Ako tento vzorec funguje:

    Podstata vzorca spočíva v tom, že určíme pozíciu posledného oddeľovača (čiarky) v reťazci a vytiahneme podreťazec zľava až po oddeľovač. Získanie pozície oddeľovača je najzložitejšia časť a tu je uvedený postup, ako to riešime:

    Najprv zistíme, koľko čiarok je v pôvodnom reťazci. Na tento účel nahradíme každú čiarku ničím ("") a výsledný reťazec poskytneme funkcii LEN:

    LEN(SUBSTITUTE(A2, ",",""))

    Pre A2 je výsledkom 35, čo je počet znakov v A2 bez čiarky.

    Od celkovej dĺžky reťazca (38 znakov) odpočítajte uvedené číslo:

    LEN(A2) - LEN(SUBSTITUTE(A2, ",",""))

    ... a dostanete 3, čo je celkový počet čiarok v A2 (a tiež poradové číslo poslednej čiarky).

    Ďalej použijete už známu kombináciu funkcií FIND a SUBSTITUTE na získanie pozície poslednej čiarky v reťazci. Číslo inštancie (v našom prípade 3. čiarka) sa dodáva pomocou vyššie uvedeného vzorca LEN SUBSTITUTE:

    FIND("#", SUBSTITUTE(A2, ",", "#", 3))

    Ukazuje sa, že tretia čiarka je 23. znak v A2, čo znamená, že potrebujeme extrahovať 22 znakov, ktoré jej predchádzajú. Takže vložíme vyššie uvedený vzorec mínus 1 do num_chars argument LEFT:

    LEFT(A2, 23-1)

    Ako odstrániť text pred posledným výskytom znaku

    Ak chcete odstrániť všetko pred posledným výskytom konkrétneho znaku, všeobecný vzorec je:

    PRAVDA( bunka , LEN( bunka ) - FIND("#", SUBSTITUTE( bunka , " znak ", "#", LEN( bunka ) - LEN(SUBSTITUTE( bunka , " znak ", "")))))

    V našej vzorovej tabuľke má vzorec na odstránenie textu pred poslednou čiarkou tento tvar:

    =RIGHT(A2, LEN(A2) - FIND("#", SUBSTITUTE(A2, ",", "#", LEN(A2) - LEN(SUBSTITUTE(A2, ",","")))))

    Na záver ho vložíme do funkcie TRIM, aby sme odstránili úvodné medzery:

    =TRIM(RIGHT(A2, LEN(A2) - FIND("#", SUBSTITUTE(A2, ",", "#", LEN(A2) - LEN(SUBSTITUTE(A2, ",",""))))))

    Ako tento vzorec funguje:

    V súhrne získame pozíciu poslednej čiarky, ako bolo vysvetlené v predchádzajúcom príklade, a odpočítame ju od celkovej dĺžky reťazca:

    LEN(A2) - FIND("#", SUBSTITUTE(A2, ",", "#", LEN(A2) - LEN(SUBSTITUTE(A2, ",",""))))

    Ako výsledok získame počet znakov za poslednou čiarkou a odovzdáme ho funkcii RIGHT, ktorá tak prenesie tento počet znakov z konca reťazca.

    Vlastná funkcia na odstránenie textu na oboch stranách znaku

    Ako ste videli v uvedených príkladoch, pomocou natívnych funkcií Excelu v rôznych kombináciách môžete vyriešiť takmer každý prípad použitia. Problémom je, že si musíte pamätať hŕbu zložitých vzorcov. Hmm, čo keby sme si napísali vlastnú funkciu, ktorá by pokryla všetky scenáre? Znie to ako dobrý nápad. Do zošita teda pridajte nasledujúci kód VBA (podrobné kroky na vloženie VBA do Excelu sútu):

    Function RemoveText(str As String , delimiter As String , occurrence As Integer , is_after As Boolean ) Dim delimiter_num, start_num, delimiter_len As Integer Dim str_result As String delimiter_num = 0 start_num = 1 str_result = "" delimiter_len = Len(delimiter) For i = 1 To occurrence delimiter_num = InStr(start_num, str, delimiter, vbTextCompare) If 0 <delimiter_num Then start_num =delimiter_num + delimiter_len End If Next i If 0 <delimiter_num Then If True = is_after Then str_result = Mid(str, 1, start_num - delimiter_len - 1) Else str_result = Mid(str, start_num) End If End If RemoveText = str_result End Function

    Naša funkcia má názov RemoveText a má nasledujúcu syntax:

    RemoveText(string, delimiter, occurrence, is_after)

    Kde:

    String - je pôvodný textový reťazec. Môže byť reprezentovaný odkazom na bunku.

    Oddeľovač - znak pred/za ktorým sa má text odstrániť.

    Výskyt - inštancia oddeľovača.

    Is_after - logická hodnota, ktorá určuje, na ktorej strane oddeľovača sa má text odstrániť. Môže to byť jeden znak alebo postupnosť znakov.

    • TRUE - odstráni všetko za oddeľovačom (vrátane samotného oddeľovača).
    • FALSE - odstráni všetko pred oddeľovačom (vrátane samotného oddeľovača).

    Po vložení kódu funkcie do zošita môžete odstrániť podreťazce z buniek pomocou kompaktných a elegantných vzorcov.

    Napríklad, ak chcete vymazať všetko za 1. čiarkou v A2, vzorec v B2 je:

    =RemoveText(A3, ", ", 1, TRUE)

    Ak chcete odstrániť všetko pred 1. čiarkou v A2, vzorec v C2 je:

    =RemoveText(A3, ", ", 1, FALSE)

    Keďže naša vlastná funkcia prijíma reťazec pre oddeľovač , do druhého argumentu vložíme čiarku a medzeru (", "), aby sme si ušetrili prácu s následným orezávaním úvodných medzier.

    Naša vlastná funkcia funguje krásne, však? Ak si myslíte, že je to komplexné riešenie, tak ste ešte nevideli ďalší príklad :)

    Odstráňte všetko pred, za alebo medzi znakmi

    Ak chcete získať ešte viac možností na odstraňovanie jednotlivých znakov alebo textu z viacerých buniek podľa zhody alebo pozície, pridajte si do svojej sady nástrojov Excel náš balík Ultimate Suite.

    Tu sa bližšie pozrieme na Odstrániť podľa pozície funkcia sa nachádza na Údaje Ablebits karta> Text skupina> Odstránenie stránky .

    Nižšie sa budeme venovať dvom najbežnejším scenárom.

    Odstránenie všetkého pred alebo za určitým textom

    Predpokladajme, že všetky vaše zdrojové reťazce obsahujú nejaké spoločné slovo alebo text a vy chcete vymazať všetko pred alebo za týmto textom. Ak to chcete urobiť, vyberte zdrojové údaje, spustite príkaz Odstrániť podľa pozície a nakonfigurujte ho podľa nasledujúceho obrázka:

    1. Vyberte Všetky znaky pred textom alebo Všetky znaky za textom a do vedľajšieho poľa zadajte text kľúča (alebo znak).
    2. V závislosti od toho, či sa majú veľké a malé písmená považovať za rôzne alebo rovnaké znaky, začiarknite alebo zrušte začiarknutie políčka Rozlišovanie veľkých a malých písmen box.
    3. Hit Odstránenie stránky .

    V tomto príklade odstraňujeme všetky znaky pred slovom "error" v bunkách A2:A8:

    A získať presne taký výsledok, aký hľadáme:

    Odstránenie textu medzi dvoma znakmi

    V situácii, keď sa medzi 2 konkrétnymi znakmi nachádzajú irelevantné informácie, môžete ich rýchlo odstrániť:

    1. Vyberte si Odstránenie všetkých podreťazcov a zadajte dva znaky do nasledujúcich políčok.
    2. Ak by sa mali odstrániť aj znaky "medzi", skontrolujte Vrátane oddeľovačov box.
    3. Kliknite na . Odstránenie stránky .

    Ako príklad môžeme vymazať všetko medzi dvoma znakmi tilda (~) a ako výsledok dostaneme dokonale vyčistené reťazce:

    Ak chcete vyskúšať ďalšie užitočné funkcie tohto multifunkčného nástroja, odporúčam vám stiahnuť si hodnotiacu verziu na konci tohto príspevku. Ďakujem za prečítanie a dúfam, že sa uvidíme na našom blogu budúci týždeň!

    Dostupné súbory na stiahnutie

    Odstránenie prvých alebo posledných znakov - príklady (.xlsm súbor)

    Ultimate Suite - skúšobná verzia (.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.