< návrat zpět

MS Excel


Téma: Podmínka NEBO - řetězec někde v buňce rss

Zaslal/a 7.11.2018 13:00

AlfanDobrý den, chci se zeptat, zda je funkcí NEBO nebo nějakou funkcí řešitelné toto.
Ve sloupci "M" mám v každém řádku různé texty.
Já vím, že bych potřeboval zjistit, zda se vždy na daném řádku v daném sloupci "M" nachází některý z těchto textových řetězců:
phm
nafta
oděv
prac
obuv
Ale nikdy nevím, jestli je na začátku nebo na konci nebo uprostřed textového řetězce v buňce.
Zkoušel jsem to takto a nefunguje mi to:
=NEBO(M2="*nafta*";M2="*phm*";M2="*prac*";M2="*obuv*";M2="*oděv*")
Vždy mi to vyhodnotí jako NEPRAVDA.
Můžete mi prosím někdo poradit?
Děkuji.

Zaslat odpověď >

#041834
elninoslov
Maticový vzorec
=SUM(IFERROR(SEARCH({"phm";"nafta";"oděv";"prac";"obuv"};M2);0))>0
=SUMA(IFERROR(HLEDAT({"phm";"nafta";"oděv";"prac";"obuv"};M2);0))>0

Nematicový vzorec
=SUM(COUNTIF(M2;{"*phm*";"*nafta*";"*oděv*";"*prac*";"*obuv*"}))>0
=SUMA(COUNTIF(M2;{"*phm*";"*nafta*";"*oděv*";"*prac*";"*obuv*"}))>0

alebo
=SUMPRODUCT(IFERROR(SEARCH({"phm";"nafta";"oděv";"prac";"obuv"};M2);0))>0
=SKALÁRNÍ(IFERROR(HLEDAT({"phm";"nafta";"oděv";"prac";"obuv"};M2);0))>0

alebo
=SUM(LEN(SUBSTITUTE(LOWER(M2);{"phm";"nafta";"oděv";"prac";"obuv"};"")))<>LEN(M2)*5
=SUMA(DÉLKA(DOSADIT(MALÁ(M2);{"phm";"nafta";"oděv";"prac";"obuv"};"")))<>DÉLKA(M2)*5

alebo
=MIN(LEN(SUBSTITUTE(LOWER(M2);{"phm";"nafta";"oděv";"prac";"obuv"};"")))<LEN(M2)
=MIN(DÉLKA(DOSADIT(MALÁ(M2);{"phm";"nafta";"oděv";"prac";"obuv"};"")))<LEN(M2)

alebo
=COUNT(SEARCH({"phm";"nafta";"oděv";"prac";"obuv"};M2))>0
=POČET(HLEDAT({"phm";"nafta";"oděv";"prac";"obuv"};M2))>0

a určite aj ďalšie :)citovat
#041835
Alfan
Děkuji.
Zkusil jsem první nematicový a vypadá to, že to bude dělat to, co potřebuji.
Ještě, kdyby se dalo tohle:
{"*phm*";"*nafta*";"*oděv*";"*prac*";"*obuv*"}
Nějak nahradit tak, že bych měl někde na jiném listu pod sebou napsané ty hledané řetězce:
phm
nafta
oděv
prac
obuv
(třeba prvním sloupci Tabulky, aby byl dynamický rozsah) a ono by se to prohledalo všechno, respektive bych jen editoval (přidával nebo ubíral řetězce) tu tabulku a nemusel bych editovat vzorec.

Ale i tak každopádně děkuji.citovat
#041836
elninoslov
V tom prípade to asi bez matice nepôjde. Funkciu matice tam vlastne plnia tie zložené zátvorky, ktoré znamenajú pole - teda maticu. Keď ich odstránime a nahradíme za oblasť, potrebujeme z tej oblasti dostať pole - teda vzorec urobiť maticový. Možno niekto dá nejaké riešenie nematicové, zatiaľ keď v ktoromkoľvek prípade zameníte {} zátvorkové pole za oblasť, a vzorec zadáte ako maticový Ctrl+Shift+Enter, bude pracovať správne. Ak sa chcete vyhnúť omylu pri zadávaní, dajte vzorec do Definovaného názvu, ale vtedy pozor na ktorom ste riadku, ak sa bude jednať o kontrolu na viac riadkoch. Všetko v príklade aj s dynamickou oblasťou.
Příloha: xlsx41836_hladaj-retazce-v-bunke.xlsx (11kB, staženo 25x)
citovat
#041837
elninoslov
Teraz pozerám, že ide asi o jednu Tabuľku a nie tabuľku, tak príklad aj tam...
Příloha: xlsx41837_hladaj-retazce-v-bunke-exceltable.xlsx (12kB, staženo 24x)
citovat
#041838
Alfan
Děkuji pánové.
Ale upřímně se přiznám, že je to na mě složité.
Ještě jsem dostal toto řešení, ale je pravda, že jsem nepsal, že bych chtěl makra.
Ale prý se ta fce dá nahrát, jako doplněk nebo mít ji součástí sešitu.
Function PROHLEDEJ(sCo As String, oblast As Range)
Dim cell As Range
Dim retezec, nalez As String
If Len(sCo) = 0 Then Exit Function
For Each cell In oblast
If Len(cell) > 0 Then
If InStr(sCo, cell) <> 0 Then
PROHLEDEJ = 1
Exit Function
End If
End If
Next cell
PROHLEDEJ = 0
End Function


a pak se použije například toto (funguje i s Tabulkou dat - phm, oděv atd. na jiném listu ve formátu Tabulky):
=PROHLEDEJ(A2;$I$3:$I$8)
(v oblasti $I$3:$I$8 jsou ta data, která se hledají)citovat
#041839
elninoslov
No neviem, ale mne teda jeden vzorec, napr.
=MAX(COUNTIF(bunka s textom;"*"&oblasť hľadaných hodnôt&"*"))>0
nepríde absolútne zložitý.

EDIT: A v tom makre inak pozor. Takto to InStr nemôže byť, lebo je to CaseSensitive. Musí to byť:
InStr(1, sCo, cell, vbTextCompare)
aby to našlo aj "Prac" aj "prac". A vracal by som Boolean, nie Variant 0/1. Ja by som navyše zmenil oblasť na pole, pretože mám proste polia rád a sú väčšinou rýchlejšie. I keď tu by to zrovna v prípade, že bude nájdený pozitívny výsledok v prvých 2 bunkách, platiť nemuselo.
Function PROHLEDEJ(sCo As String, oblast As Range) As Boolean
Dim cell As Range
Dim retezec As String
Application.Volatile
If Len(sCo) = 0 Then Exit Function
For Each cell In oblast
retezec = cell.Value2
If Len(retezec) > 0 Then
If InStr(1, sCo, retezec, vbTextCompare) <> 0 Then
PROHLEDEJ = True
Exit Function
End If
End If
Next cell
End Function
citovat
#041840
Alfan
Tenhle vzorec mi nefunguje.
=MAX(COUNTIF(bunka s textom;"*"&oblasť hľadaných hodnôt&"*"))>0

Jinak makro respektive funkce dobrá, děkuji.citovat
#041841
elninoslov
A robíte to určite správne ? Akú máte verziu Office ?
Příloha: xlsx41841_hladaj-retazce-v-bunke-priklad.xlsx (13kB, staženo 24x)
citovat
#041842
Alfan
Aha, on od vás nebyl napsaný, jako maticový a já ho jen zkopíroval a zapsal, jako obyčejný.
Děkujicitovat

Uživatelské menu

Nejste přihlášen(a)
avatar\n

Menu

Formulář Faktura

Formulář Faktura IV

Oblíbený formulář Faktura byl vylepšen a rozšířen.
Více se dočtete zde.

Helios iNuvio

Používáte podnikový systém Helios iNuvio? Potřebujete pomoci se správou nebo vyvinout SQL proceduru? Více informací naleznete na stránce Helios iNuvio.

On-line nástroje