=VYHLEDAT(1E+307;A3:E3;A3:E3)
Ověření dat funguje jen v některých případech a je dobrou pomůckou pro toho,kdo chce kontrolovat vkládaná data. Neúmyslné obejití kontrol např. kopírováním, je poměrně běžné. Zabezpečení je ale i při použití vba velmi obtížné.
Takže, pokud uživatel nechce úmyslně kontroly obejít, lze částečně tuto chybu eliminovat. Např. bez VBA omezím výběr jiné buňky v listu, ale už nezabráním ctrl-c v jiném sešitu, případě i v jiné aplikaci.
Pokud uživatel chce zadat nepovolená data, tak je zadá, i když možná ne snadno.
Funkce VVyhledat hledá v řádku $BC4:$BL4 hodnotu W$1&"*" == "NAZ PŮVODNÍ*", tj. hodnotu, která začíná textem z horního řádku (v podobných případech je výhodné hledaný text vidět, lépe se to kontroluje). Pokud najde, vráti odpovídající hodnotu z prvního řádku bloku, tj. hledanou hodnotu. Pokud ji nenajde, funkce IFNA vrátí prázdný text. Funkce část přeskočí začátek o délku textu z prvního řádku a přidá zadaný počet hvězdiček.
Pokud by to byl problém, např. některý text by byl zkrácenou verzí jiného, lze hledat W$1&"~**", což bude hledat kromě textu i první hvězdičku.
Mimochodem, občas jsou v prvním řádku i nepříjemné mezery.
Co třeba:
=ČÁST(IFNA(VVYHLEDAT(W$1&"*";$BC4:$BL4;1;0);"");DÉLKA(W$1)+4;100000)
(Za předpokladu, že soubor udrží rozumnou strukturu.)
Malá rada. Vykašli se na to.
To co vymýšlíš, je amatérsky řešená rozptýlená databáze. Excel a podobná makra nemohou nezajistit konzistenci dat a při větším počtu položek už to ani nezkontroluješ.
Pokud to musí být a položek bude více než desítka, je nezbytné definovat master data, která budou v případě rozdílů ta "správná".
K tomu je nezbytné doplnit nějakou logiku kontrol konzistence, ...
Proč to raději nenaklikáte?
Power Query.....
Vstupní data do tabulky, Vybrat: Data/Z tabulky nebo oblasti
V PQ - klik na první sloupec,
Rozdělit sloupec, oddělovačem, Upřesnit možnosti ... rozdělit do řádky.
Pravý klik na první sloupec, transformovat, ořízout.
Zavřít a načíst (vybrat kam).
HOTOVO
Příště pravý klik na dotaz, vybrat aktualizovat.
Vygenerovaný program vypadá takto:
let
Zdroj = Excel.CurrentWorkbook(){[Name="Tabulka1"]}[Content],
#"Rozdělit sloupec oddělovačem" = Table.ExpandListColumn(Table.TransformColumns(Zdroj, {{"SL 1", Splitter.SplitTextByDelimiter(",", QuoteStyle.Csv), let itemType = (type nullable text) meta [Serialized.Text = true] in type {itemType}}}), "SL 1"),
#"Změněný typ1" = Table.TransformColumnTypes(#"Rozdělit sloupec oddělovačem",{{"SL 1", type text}}),
#"Oříznutý text" = Table.TransformColumns(#"Změněný typ1",{{"SL 1", Text.Trim, type text}})
in
#"Oříznutý text"
add zadání:
podmíněný formát nezabrání vložení chybného textu.
validace se dá snadno obejít pomocí ctrl C/... a uživatel to ani nemusí vědět.
add vzorce:
"Jiří497" - seznam zakázaných znaků - v excelu je používáno unicode -> ten seznam zakázaných znaků může být docela dlouhý
"vikizaj (alternativa)" - funkce hledat je ve vzorci chybná, klidně schválí znaky *~?, lepší je funkce najít. + chybí funkce pročistit.
ps. Nechápu rostoucí požadavky na řešení vzorcem. Pokud jde o použití vzorce v jiném programu nez je excel, je lepší se v těchto úlohách zamyslet, jestli cílový program nepodporuje regulární výrazy: google REGEXEXTRACT, LO calc je podporuje v běžných výrazech, ...
Pak je řešení podstatně jednodušší.
Hele, zkus taky číst, už jsem to napsal. Zkusím to tedy jinak.
Když máš vzorec pro pondělí, tak pátek dostaneš po přičtení 4:
=DATUM(2000 + ZPRAVA(A1;2);1;4) - DENTÝDNE(DATUM(2000 + ZPRAVA(A1;2);1;4);3) + (ZLEVA(A1;2)-1)*7 + 4
První den týdne dostanete:
=DATUM(rok;1;4) - DENTÝDNE(DATUM(rok;1;4);3) + (týden-1)*7
Na opravu "vzorce" si netroufám.
Použijte funkce maxifs, (minifs), ...
Golem napsal/a:
Jde mi o emulaci v jiném jazyku
Děkuji moc za účast. Hezký den
Anglická verze vzorce se vkládá do formula. Kromě přeložených názvů funkcí musíte také nastavit oddělovače, případné texty u některých vzorců, ...
Pokud se nechcete unavovat překladem, stačí ve vba do formulalocal vložit českou verzi a ve formula najdete anglický překlad.
Jednoduše:
=KDYŽ(JE.ČISLO(A1);A1/10^(POZVYHLEDAT(0;MOD(A1;10^(ŘÁDEK(NEPŘÍMÝ.ODKAZ("A1:A4"))-1)))-1);"")
(maticově)
Použij funkci řádek() v podmíněném formátu. např:
=MOD(ŘÁDEK()-1;4) <2
a pro splněnou podmínku nastav pozadí
Něco takového:
=IFERROR(SVYHLEDAT(A2;A3:A3:$B$35;2;0);0)-B2
??
Oblíbený formulář Faktura byl vylepšen a rozšířen.

Více se dočtete zde.
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.