Obsah
Učebnica obsahuje niekoľko príkladov vzorcov "Excel if contains", ktoré ukazujú, ako vrátiť niečo v inom stĺpci, ak cieľová bunka obsahuje požadovanú hodnotu, ako vyhľadávať s čiastočnou zhodou a testovať viacero kritérií pomocou logiky OR aj AND.
Jednou z najčastejších úloh v programe Excel je kontrola, či bunka obsahuje hodnotu, ktorá vás zaujíma. Aká hodnota to môže byť? Len akýkoľvek text alebo číslo, konkrétny text alebo vôbec akákoľvek hodnota (nie prázdna bunka).
V programe Excel existuje niekoľko variantov vzorca "Ak bunka obsahuje" v závislosti od toho, aké hodnoty chcete presne zistiť. Vo všeobecnosti použijete funkciu IF na vykonanie logického testu a vrátenie jednej hodnoty, keď je podmienka splnená (bunka obsahuje), a/alebo inej hodnoty, keď podmienka splnená nie je (bunka neobsahuje). Nižšie uvedené príklady zahŕňajú najčastejšie scenáre.
Ak bunka obsahuje akúkoľvek hodnotu, potom
Na začiatok sa pozrieme, ako nájsť bunky, ktoré obsahujú čokoľvek: akýkoľvek text, číslo alebo dátum. Na tento účel použijeme jednoduchý vzorec IF, ktorý kontroluje, či nie sú bunky prázdne.
IF( bunka "", value_to_return , "")Ak chcete napríklad v stĺpci B vrátiť hodnotu "Nie je prázdne", ak bunka stĺpca A v tom istom riadku obsahuje akúkoľvek hodnotu, zadajte do bunky B2 nasledujúci vzorec a potom dvakrát kliknite na malý zelený štvorček v pravom dolnom rohu, aby ste vzorec skopírovali do stĺpca:
=IF(A2"", "Nie je prázdne", "")
Výsledok bude vyzerať podobne:
Ak bunka obsahuje text, potom
Ak chcete nájsť len bunky s textovými hodnotami bez čísel a dátumov, použite IF v kombinácii s funkciou ISTEXT. Tu je všeobecný vzorec na vrátenie určitej hodnoty v inej bunke, ak cieľová bunka obsahuje akýkoľvek text :
IF(ISTEXT( bunka ), value_to_return , "")Predpokladajme, že chcete do stĺpca B vložiť slovo "áno", ak bunka v stĺpci A obsahuje text. Ak to chcete urobiť, vložte do bunky B2 nasledujúci vzorec:
=IF(ISTEXT(A2), "Áno", "")
Ak bunka obsahuje číslo, potom
Podobným spôsobom môžete identifikovať bunky s číselnými hodnotami (čísla a dátumy). Na tento účel použite funkciu IF spolu s funkciou ISNUMBER:
IF(ISNUMBER( bunka ), value_to_return , "")Nasledujúci vzorec vráti "áno" v stĺpci B, ak zodpovedajúca bunka v stĺpci A obsahuje akékoľvek číslo:
=IF(ISNUMBER(A2), "Áno", "")
Ak bunka obsahuje konkrétny text
Vyhľadávanie buniek obsahujúcich určitý text (alebo čísla či dátumy) je jednoduché. Napíšete regulárny vzorec IF, ktorý skontroluje, či cieľová bunka obsahuje požadovaný text, a text, ktorý sa má vrátiť, zadáte do políčka value_if_true argument.
IF( bunka =" text ", value_to_return , "")Ak chcete napríklad zistiť, či bunka A2 obsahuje "jablká", použite tento vzorec:
=IF(A2="jablká", "Áno", "")
Ak bunka neobsahuje konkrétny text
Ak hľadáte opačný výsledok, t. j. vrátiť nejakú hodnotu do iného stĺpca, ak cieľová bunka neobsahuje zadaný text ("jablká"), potom vykonajte jednu z nasledujúcich možností.
Zadajte prázdny reťazec ("") do value_if_true a text, ktorý sa má vrátiť v value_if_false argument:
=IF(A2="jablká", "", "Nie jablká")
Alebo vložte operátor "not equal to" do logical_test a text, ktorý sa má vrátiť v value_if_true:
=IF(A2 "jablká", "Nie jablká", "")
Tak či onak, vzorec poskytne tento výsledok:
Ak bunka obsahuje text: vzorec rozlišujúci malé a veľké písmená
Ak chcete prinútiť vzorec rozlišovať medzi veľkými a malými písmenami, použite funkciu EXACT, ktorá kontroluje, či sú dva textové reťazce presne rovnaké vrátane veľkosti písmen:
=IF(EXACT(A2, "APPLES"), "Áno", "")
Môžete tiež zadať textový reťazec modelu do niektorej bunky (napríklad do bunky C1), opraviť odkaz na bunku pomocou znaku $ ($C$1) a porovnať cieľovú bunku s touto bunkou:
=IF(EXACT(A2,$C$1), "Áno", "")
Ak bunka obsahuje konkrétny textový reťazec (čiastočná zhoda)
Skončili sme s triviálnymi úlohami a prechádzame k náročnejším a zaujímavejším :) V tomto príklade sú potrebné tri rôzne funkcie na zistenie, či je daný znak alebo podreťazec súčasťou obsahu bunky:
IF(ISNUMBER(SEARCH(" text" , bunka )), value_to_return ,"")Tento vzorec funguje zvnútra von:
- Funkcia SEARCH vyhľadá textový reťazec, a ak ho nájde, vráti pozíciu prvého znaku, v opačnom prípade vráti chybu #VALUE!.
- Funkcia ISNUMBER skontroluje, či vyhľadanie SEARCH bolo úspešné alebo neúspešné. Ak vyhľadanie SEARCH vrátilo akékoľvek číslo, funkcia ISNUMBER vráti TRUE. Ak vyhľadanie SEARCH skončilo chybou, funkcia ISNUMBER vráti FALSE.
- Nakoniec funkcia IF vráti zadanú hodnotu pre bunky, ktoré majú v logickom teste hodnotu TRUE, inak prázdny reťazec ("").
A teraz sa pozrime, ako tento všeobecný vzorec funguje v reálnych pracovných listoch.
Ak bunka obsahuje určitý text, vložte hodnotu do inej bunky
Predpokladajme, že máte zoznam objednávok v stĺpci A a chcete nájsť objednávky s konkrétnym identifikátorom, povedzme "A-". Úlohu môžete splniť pomocou tohto vzorca:
=IF(ISNUMBER(SEARCH("A-",A2)), "Platné","")
Namiesto pevného zakódovania reťazca do vzorca ho môžete zadať do samostatnej bunky (E1) a odkazovať na ňu vo vzorci:
=IF(ISNUMBER(SEARCH($E$1,A2)), "Platné","")
Aby vzorec fungoval správne, nezabudnite uzamknúť adresu bunky obsahujúcej reťazec so znakom $ (absolútny odkaz na bunku).
Ak bunka obsahuje konkrétny text, skopírujte ho do iného stĺpca
Ak chcete skopírovať obsah platných buniek niekam inam, jednoducho zadajte adresu vyhodnocovanej bunky (A2) v príkaze value_if_true argument:
=IF(ISNUMBER(SEARCH($E$1,A2)),A2,"")
Na nasledujúcom obrázku sú zobrazené výsledky:
Ak bunka obsahuje konkrétny text: vzorec rozlišujúci malé a veľké písmená
V oboch uvedených príkladoch vzorce nerozlišujú veľké a malé písmená. V situáciách, keď pracujete s údajmi, ktoré rozlišujú veľké a malé písmená, použite na rozlíšenie veľkosti znakov funkciu FIND namiesto funkcie SEARCH.
Napríklad nasledujúci vzorec identifikuje len objednávky s veľkým písmenom "A-", pričom malé písmená "a-" ignoruje.
=IF(ISNUMBER(FIND("A-",A2)), "Platné","")
Ak bunka obsahuje jeden z mnohých textových reťazcov (logika OR)
Ak chcete identifikovať bunky obsahujúce aspoň jednu z mnohých hľadaných vecí, použite jeden z nasledujúcich vzorcov.
Vzorec IF ALEBO ISNUMBER SEARCH
Najzrejmejším prístupom by bolo skontrolovať každý podreťazec samostatne a funkcia OR by v logickom teste vzorca IF vrátila TRUE, ak sa nájde aspoň jeden podreťazec:
IF(OR(ISNUMBER(SEARCH(" reťazec1 ", bunka )), ISNUMBER(SEARCH(" reťazec2 ", bunka ))), value_to_return , "")Predpokladajme, že máte zoznam SKU v stĺpci A a chcete nájsť tie, ktoré obsahujú buď "šaty" alebo "sukňa". Môžete to urobiť pomocou tohto vzorca:
=IF(OR(ISNUMBER(SEARCH("šaty",A2)),ISNUMBER(SEARCH("sukňa",A2))), "Platí ","")
Tento vzorec funguje celkom dobre pre niekoľko položiek, ale určite to nie je správna cesta, ak chcete kontrolovať veľa vecí. V tomto prípade by bolo lepšie použiť funkciu SUMPRODUCT, ako je uvedené v ďalšom príklade.
Vzorec SUMPRODUCT ISNUMBER SEARCH
Ak pracujete s viacerými textovými reťazcami, vyhľadávanie každého reťazca osobitne by váš vzorec príliš predĺžilo a sťažilo by jeho čítanie. Elegantnejším riešením by bolo vloženie kombinácie ISNUMBER SEARCH do funkcie SUMPRODUCT a zistenie, či je výsledok väčší ako nula:
SUMPRODUCT(--ISNUMBER(SEARCH( reťazce , bunka )))>0Ak chcete napríklad zistiť, či A2 obsahuje niektoré zo slov zadaných v bunkách D2:D4, použite tento vzorec:
=SUMPRODUCT(--ISNUMBER(SEARCH($D$2:$D$4,A2)))>0
Prípadne môžete vytvoriť pomenovaný rozsah obsahujúci reťazce, ktoré sa majú vyhľadať, alebo môžete slová zadať priamo do vzorca:
=SUMPRODUCT(--ISNUMBER(SEARCH({"šaty", "sukňa", "džínsy"},A2)))>0
V každom prípade bude výsledok podobný tomuto:
Aby bol výstup užívateľsky prívetivejší, môžete vyššie uvedený vzorec vložiť do funkcie IF a namiesto hodnôt TRUE/FALSE vrátiť vlastný text:
=IF(SUMPRODUCT(--ISNUMBER(SEARCH($D$2:$D$4,A2)))>0, "Valid", "")
Ako tento vzorec funguje
V jadre používate ISNUMBER spolu so SEARCH, ako bolo vysvetlené v predchádzajúcom príklade. V tomto prípade sú výsledky vyhľadávania reprezentované vo forme poľa ako {TRUE;FALSE;FALSE}. Ak bunka obsahuje aspoň jeden zo zadaných podreťazcov, v poli bude TRUE. Dvojitý unárny operátor (--) vynúti hodnoty TRUE / FALSE na 1, resp. 0 a poskytne pole ako{1;0;0}. Nakoniec funkcia SUMPRODUCT sčíta čísla a vyberieme bunky, v ktorých je výsledok väčší ako nula.
Ak bunka obsahuje niekoľko reťazcov (logika AND)
V situáciách, keď chcete nájsť bunky obsahujúce všetky zadané textové reťazce, použite už známu kombináciu ISNUMBER SEARCH spolu s IF AND:
IF(AND(ISNUMBER(SEARCH(" reťazec1 ", bunka )), ISNUMBER(SEARCH(" reťazec2 ", bunka ))), value_to_return ,"")Pomocou tohto vzorca môžete napríklad nájsť SKU obsahujúce slová "dress" a "blue":
=IF(AND(ISNUMBER(SEARCH("dress",A2)),ISNUMBER(SEARCH("blue",A2))), "Valid ","")
Alebo môžete reťazce napísať do samostatných buniek a odkazovať na ne vo vzorci:
=IF(AND(ISNUMBER(SEARCH($D$2,A2)),ISNUMBER(SEARCH($E$2,A2)), "Platné ","")
Alternatívnym riešením je spočítať výskyty jednotlivých reťazcov a skontrolovať, či je každý počet väčší ako nula:
=IF(AND(COUNTIF(A2, "*dress*")>0,COUNTIF(A2, "*blue*")>0), "Valid","")
Výsledok bude presne taký, ako je zobrazený na obrázku vyššie.
Ako vrátiť rôzne výsledky na základe hodnoty bunky
V prípade, že chcete porovnať každú bunku v cieľovom stĺpci s iným zoznamom položiek a pre každú zhodu vrátiť inú hodnotu, použite jeden z nasledujúcich prístupov.
Vnorené IF
Logika vnoreného vzorca IF je jednoduchá: na testovanie každej podmienky použijete samostatnú funkciu IF a v závislosti od výsledkov týchto testov vrátite rôzne hodnoty.
IF( bunka =" lookup_text1 ", " vrátiť _ text1 ", IF( bunka =" lookup_text2 ", " vrátiť _ text2 ", IF( bunka =" lookup_text3 ", " vrátiť _ text3 ", "")))Predpokladajme, že máte zoznam položiek v stĺpci A a chcete mať ich skratky v stĺpci B. Na to použite nasledujúci vzorec:
=IF(A2="jablko", "Ap", IF(A2="avokádo", "Av", IF(A2="banán", "B", IF(A2="citrón", "L", ""))))
Podrobné informácie o syntaxi a logike vnoreného IF nájdete v časti Excel vnorený IF - viacero podmienok v jednom vzorci.
Vyhľadávací vzorec
Ak hľadáte kompaktnejší a zrozumiteľnejší vzorec, použite funkciu LOOKUP s vyhľadávacími a návratovými hodnotami zadanými ako konštanty vertikálneho poľa:
LOOKUP( bunka , {" lookup_text1 ";" lookup_text2 ";" lookup_text3 ";...}, {" vrátiť _ text1 ";" vrátiť _ text2 ";" vrátiť _ text3 ";...})Ak chcete získať presné výsledky, nezabudnite uviesť hodnoty vyhľadávania v abecedné poradie , od A po Z.
=LOOKUP(A2,{"apple";"avocado";"banana";"lemon"},{"Ap";"Av";"B";"L"})
V porovnaní s vnorenými IF má vzorec Lookup ešte jednu výhodu - rozumie zástupné znaky a preto môže identifikovať čiastočné zhody.
Ak napríklad stĺpec A obsahuje niekoľko druhov banánov, môžete vyhľadať "*banán*" a pre všetky takéto bunky sa vráti rovnaká skratka ("B"):
=LOOKUP(A2,{"apple";"avocado";"*banana*";"lemon"},{"Ap";"Av";"B";"L"})
Viac informácií nájdete v časti Vyhľadávací vzorec ako alternatíva k vnoreným IF.
Vzorec Vlookup
Pri práci so súborom premenlivých údajov môže byť pohodlnejšie zadať zoznam zhody do samostatných buniek a získať ich pomocou vzorca Vlookup, napr:
=VLOOKUP(A2, $D$2:$E$5, 2,FALSE )
Viac informácií nájdete v časti Excel VLOOKUP tutoriál pre začiatočníkov.
Takto v programe Excel skontrolujete, či bunka obsahuje nejakú hodnotu alebo konkrétny text. Budúci týždeň budeme pokračovať v skúmaní vzorcov programu Excel s názvom Ak bunka obsahuje a naučíme sa počítať alebo sčítavať príslušné bunky, kopírovať alebo odstraňovať celé riadky obsahujúce tieto bunky a ďalšie funkcie.
Cvičný zošit
Excel Ak bunka obsahuje - príklady vzorcov (.xlsx súbor)