Fórum pro uživatele kancelářského balíku OpenOffice | LibreOffice
 

#1 19. 3. 2014 22:02:17

jadd
Člen
Registrace: 3. 3. 2013
Příspěvků: 19

Funkce SVYHLEDAT (Excel) - Ekvivalent v LO i AOO # VYŘEŠENO

Ahoj,
Než jsem se rozhodl zeptat prohledal jsem nápovědu v programu i hledal na zdejším foru.
http://forum.openoffice.cz/search.php?s … =853141714
Hledám ekvivalent k této funkci.
Předvedu na Excelu (obrázky nevydrží věčnost ale jsou veřejné)
?di=1113952619591
SVYHLEDAT-B2-E7
?di=9139526195910
SVYHLEDAT-Dialog
?di=813952619597
SVYHLEDAT-Dialog-hodnoty
?di=1139526195916
SVYHLEDAT-výsledek

Myslím, že je to jasné,
Funkce XLOOKUP zmíněná v diskuzi mi ekvivalentní nepřijde, jsou tam nějaké matice a indexy stejně nerozumím co tím je myšleno.

Editoval jadd (20. 3. 2014 23:26:29)

Offline

#2 20. 3. 2014 04:38:30

j-pastierik
Člen
Registrace: 15. 11. 2004
Příspěvků: 761

Re: Funkce SVYHLEDAT (Excel) - Ekvivalent v LO i AOO # VYŘEŠENO

Funkcia LOOKUP j eúplne ekvivalentná, iba sa namiesto čísla stĺpca zadáva rozsah, odkiaľ sa berú výsledky:
=LOOKUP(2;B2:E7;D2:D7)

Editoval j-pastierik (20. 3. 2014 04:40:43)

Offline

#3 20. 3. 2014 06:48:34

neutr
Člen
Registrace: 8. 3. 2007
Příspěvků: 3,435

Re: Funkce SVYHLEDAT (Excel) - Ekvivalent v LO i AOO # VYŘEŠENO

Já se přiznám, že s Excelem moc nekamarádím a nedovedu to správně porovnat, ale s těmi LOOKUP(y) se to má pro získání přehledu následovně :
HLOOKUP - znamená Horizontal - tedy jako řádky
VLOOKUP - znamená Vertical - tedy jako sloupce
LOOKUP - znamená něco jako navštívit, nebo podívat se ale přeložit se to asi dá také jako "vyhledat". Při tom nerozhoduje zda se prohledává řádek, nebo sloupec, takže LOOKUP umí to co ty dvě specializované funkce dohromady.


      Je tedy k zamyšlení, proč je tam jednou univerzální řešení, a k tomu ještě řešení specializovaná. Důvod to má, ale z nápovědy se porovnání dá vyčíst jen velmi obtížně - i když to tam nepřímo je. Univerzílní LOOKUP umí hledat jen v seřezených úsecích. Konkrétně sestupně, nebo vzestupně. Takže spíš náhodou dá někdy správný výsledek. Je to značná slabina této funkce. Specializované funkce také tuto variantu (setřídění) upřednostňují, ale dá se zvolit navíc prohledávání nesetříděného úseku. A právě tohle univerzální řešení neumí. Zdá se to divné - proč? Zase tyto vlastnosti mají důvod - ten je v algoritmu.
       Algoritmus funguje takto : Funkce prohledává úsek z jednoho konce na druhý. Když LOOKUP narazí na větší hodnotu, nežli je hledaná skončí bez výsledku, když hodnotu najde dá výsledek. Je to vlastně o rychlosti. Specializované funkce projdou celý úsek. Samozřejmě když narazí na hledanou hodnotu skončí. V režimu nesetříděného úseku jsou ale značně pomalejší.
       Vyhledávací algoritmy jsou podobné s algoritmy pro třídění. Některé vyhledávají i nejbližší hodnotu k hledané a tady jsou podobné například ShellSortu, nebo i BubleSortu. Algoritmus porovnává hodnoty pole s hodnotou zadanou. Takže realizační script udržuje v paměti jak hledanou hodnotu, tak hodnotu nejblíže nižší. Když narazí na hodnotu, která je blíže k hledané - dá ji do paměti místo původní a pokračuje - tady je podobnost se "sorty". Když tedy narazí na vyšší hodnotu, porovná absolutní hodnotu rozdílu mezi nižší a vyšší. Z toho vrátí buď hodnotu nejblíže nižší, nebo nejblíže vyšší. Nyní už pochopíme jak propastný rozdíl je mezi vyhledávání v setříděném a nesetříděném úseku.
       Když je úsek setříděný, může funkce skončit hned jak narazí na hodnotu vyšší. Když není setříděný musí projet celé pole a při tom musí udržovat v paměti jak hodnotu nejblíže menší, tak hodnotu nejblíže větší.
       Ve finále ještě musím dodat, že se jedná o binární vyhledávání a to u OOo je ztíženo tím, že to jde pomocí Javy, která není žádný rychlík. Samozřejmě se používají také jiné programy - zejména z takových důvodů - ale jde vždy o zprostředkování - nepřímo. Nejnověji LO v Pythonu, čímž se zřejmě dostává na úroveň rychlosti Excelu (ale s tím si nejsem moc jistý).
       Takže Excel si možná může dovolit 1 funkci na vše, ale OOo se muselo přizpůsobit podmínkám plynoucích z výpočtové náročnosti algoritmů. Vím například podle Bugg hlášení, že Calc LO uměl spadnout když dostal "štos" k setřídění - snad je to už v pořádku. Také je pravdou, že se používají různé druhy algoritmů a to jak ke třídění, tak k vyhledávání. Viděl jsem nějaké porovnání "sortů" a ne vždy všechny druhy dopadly jednoznačně. Jako nejlepší byl vyhodnocen QuickSort z pohledu "průměru", ale například zůstal daleko za ShakerSortem, nebo i snad BubleSortem pokud se jednalo o třídění "malých" objemů. Ale značně překonal všechny konkurenty v běhu na dlouhou trať.
       V praxi se nám to projeví například tak, že vzorec má uvedeno, že můžeme zadat "až" 30 hodnot (parametrů). Většinou ale umí "bez problému" i mnohem více. Jenže do těch 30-ti používá jiný algoritmus, nežli za touto hranicí, a výsledek je zřejmě "bez záruky".


Moje e-mailová adresa
Pokud je Váš problém vyřešen, označte prosím svůj příspěvek za "VYŘEŠENÝ"
Zlepšíte orientaci při vyhledávání řešení JAK OZNAČIT TÉMA ZA VYŘEŠENÉ

Offline

#4 20. 3. 2014 07:48:23

Ondra.kl
Člen
Registrace: 30. 9. 2008
Příspěvků: 933

Re: Funkce SVYHLEDAT (Excel) - Ekvivalent v LO i AOO # VYŘEŠENO

SVYHLEDAT = VLOOKUP

(malé písmena kvůli kontroly spamu)

Offline

#5 20. 3. 2014 10:11:24

lp.
Člen
Registrace: 24. 9. 2009
Příspěvků: 842

Re: Funkce SVYHLEDAT (Excel) - Ekvivalent v LO i AOO # VYŘEŠENO

Zkusím to stručně popsat:
a) ekvivalenty vyhledávacích funkcí:
LOOKUP = VYHLEDAT
VLOOKUP = SVYHLEDAT
HLOOKUP = VVYHLEDAT
MATCH = POZVYHLEDAT

Chování těchto funkcí v Calcu a Excelu je velice podobné, dá se řící, že co chodí v excelu funguje i v Calcu. Opačně to vždy platit nemusí. Rozdíly jsou např. při použití regulárních výrazů. Další drobné rozdíly jsou v obsluze prázdných buněk, volatilitě, ...

B) Algoritmy:
"Rychlé" (binární) hledání - všechny uvedené funkce, pro správný výsledek obvykle vyžadují vzestupné setříděný seznam.
(Funkce MATCH umí rychle hledat i v sestupně setříděném seznamu.)

Při rychlém hledání (vzestupně setříděného seznamu) funkce hledá poslední hodnotu, která je menší nebo rovna hledané. Začíná uprostřed seznamu a podle výsledku porovnání dále vybere prostřední prvek dolní nebo horní poloviny klíčů atd. Když narazí na shodu, přejde na sekvenční hledání posledního shodného výskytu.
Při nesetříděném seznamu je výsledek obecně složitě předvídatelný, protože během výpočtu ignoruje někdy i velice rozsáhlou oblast.

"Sekvenční" hledání - LOOKUP to neumí, ostatní funkce ano.

Funkce sekvenčně prohedává seznam a vrátí první prvek, který se shoduje s hledaným.

Jak je z popisu (snad) zřejmé, rychlost je dána počtem potřebných porovnání. Pokud vím, že seznam je setříděn, lze toho využít k významnému zmenšení počtu porovnání.

Způsob, jak byl seznam setříděn zde nehraje žádnou roli a žádná uvedená funkce si seznam netřídí.

Offline

#6 20. 3. 2014 11:49:57

neutr
Člen
Registrace: 8. 3. 2007
Příspěvků: 3,435

Re: Funkce SVYHLEDAT (Excel) - Ekvivalent v LO i AOO # VYŘEŠENO

Algoritmy pro vyhledávání jsou samozřejmě jiné a nic netřídí. je jich ale více druhů a těžko říct, které jsou konkrétně v jakém vzorci (funkci) použity. Bude to různé podle verzí a podle AOO i LO. Může být napsán také nějaký speciál, ale většinou jsou si tyto algoritmy vždy nějak podobné. Viz :
Binární hledání, Interpolační hledání, Lineární hledání, Hledání prořezáváním. Mimo toho jsou na uvedené adrese další 3 pro vyhledávání jen textu.


Mimo toho existuje nejméně 13 různých algoritmů pro třídění - například : ShellSort.


Použil jsem stránky algoritmy.net, kde je to poměrně dobře popsané, ale elgoritmy zde popsané - a nejen třídící nebo vyhledávací nejsou zastoupeny vyčerpávajícím způsobem. Jsou tam někdy i animace a lze pochopit docela intuitivně jak to pracuje. Stránka je staršího data.
       Řeším pro mne docela zásadní problém pomalého třídění, takže už jsem dost stránek viděl. Z toho důvodu jsem to dal k "lepšímu". Já si samozřejmě vyhledávání s tříděním nepletu a myslím, že jsem to nenapsal tak, aby to někoho zmátlo.


PS - teď jsem si uvědomil proč lp. napsal tu poslední větu. Jistě si nic vyhledávací funkce netřídí, ale podle setřídění si nastaví začátek pole - použiju kopii nápovědy :
Syntaxe HLOOKUP
HLOOKUP(KritériumHledání; Matice; Index; PořadíŘazení)
Viz též:VLOOKUP (sloupce a řádky jsou prohozeny)
Syntaxe VLOOKUP
Je-li vynechán parametr PořadíŘazení nebo je-li nastaven na TRUE nebo 1, předpokládá se, že jsou data již seřazena vzestupně. V tomto případě, není-li nalezeno přesné KritériumHledání, bude vrácena poslední hodnota menší než kritérium. Je-li parametr PořadíŘazení nastaven na FALSE nebo 0, kritérium musí být nalezeno, jinak funkce skončí

Editoval neutr (20. 3. 2014 12:12:28)


Moje e-mailová adresa
Pokud je Váš problém vyřešen, označte prosím svůj příspěvek za "VYŘEŠENÝ"
Zlepšíte orientaci při vyhledávání řešení JAK OZNAČIT TÉMA ZA VYŘEŠENÉ

Offline

#7 20. 3. 2014 16:35:37

jadd
Člen
Registrace: 3. 3. 2013
Příspěvků: 19

Re: Funkce SVYHLEDAT (Excel) - Ekvivalent v LO i AOO # VYŘEŠENO

Vyčerpávající informace, ale
?di=13139532934514
Kde dělám chybu?
Nejdříve jsem pozice vybíral myší, to mezi rozsah přidalo ref, i tak to ukazovalo chybu. Také jsem zkoušel tu 2 vybrat myší na buňku ale to je blbost, z logiky, že bych to pak ani nemusel hledat, mi to přišlo jako nesmysl, a stejně to výsledek nevrátilo.

Offline

#8 20. 3. 2014 18:08:47

neutr
Člen
Registrace: 8. 3. 2007
Příspěvků: 3,435

Re: Funkce SVYHLEDAT (Excel) - Ekvivalent v LO i AOO # VYŘEŠENO

Ve Vašem případě je to takto :

=VLOOKUP(2;B2:D6;3;0)

Index je číslo sloupce z relativní oblasati. Ve Vašem případě sl "B" = index 1....."D"=3 Otestujte si
duplicity dejte např. do B5 také dvojku ale do D5 si dejte "def" a pak varianty

=VLOOKUP(2;B2:D6;3)
=VLOOKUP(2;B2:D6;3;0)
=VLOOKUP(2;B2:D6;3;1)

Editoval neutr (20. 3. 2014 18:18:07)


Moje e-mailová adresa
Pokud je Váš problém vyřešen, označte prosím svůj příspěvek za "VYŘEŠENÝ"
Zlepšíte orientaci při vyhledávání řešení JAK OZNAČIT TÉMA ZA VYŘEŠENÉ

Offline

#9 20. 3. 2014 23:20:23

jadd
Člen
Registrace: 3. 3. 2013
Příspěvků: 19

Re: Funkce SVYHLEDAT (Excel) - Ekvivalent v LO i AOO # VYŘEŠENO

Tak jo, je to ono. Předtím jsem to zkoušel na LO 4.2.0.1 (nechávalo to při výběru REF), teď jsem to zkoušel na LO fresh 4.2.2.1 (i když vyberu myší rozsah žádný REF to nepřidá). Předtím jsem ale takovýto způsob zkoušel, a vrácelo to chyby.

IP. napsal(a)

Rozdíly jsou např. při použití regulárních výrazů.

Na to jsem koukal u MSO2010, že nejdou ani v Hledat a nahradit.
?di=1313953526790
Škoda, že v nápovědě není ukázka, jako např. u databázové funkce .. a vůbec má to neintuitivní názvy, že člověk hledající v nápovědě, blbě hledá co najít chce. Musím nejdříve pročíst všechny funkce sešitu ..
?di=213953536750

Editoval jadd (20. 3. 2014 23:40:35)

Offline

#10 21. 3. 2014 00:05:22

lp.
Člen
Registrace: 24. 9. 2009
Příspěvků: 842

Re: Funkce SVYHLEDAT (Excel) - Ekvivalent v LO i AOO # VYŘEŠENO

jadd napsal(a)
IP. napsal(a)

Rozdíly jsou např. při použití regulárních výrazů.

Na to jsem koukal u MSO2010, že nejdou ani v Hledat a nahradit.

Je to jinak. Ve vyhledávacích funkcích můžete používat regulární výrazy v Calcu i v Excelu. Syntaxe se liší.

Offline

#11 21. 3. 2014 01:00:42

jadd
Člen
Registrace: 3. 3. 2013
Příspěvků: 19

Re: Funkce SVYHLEDAT (Excel) - Ekvivalent v LO i AOO # VYŘEŠENO

http://forum.openoffice.cz/viewtopic.php?id=436
Teď jsem našel starý topic, kde mě potěšil odkaz dole.

Že je tu nějaká wiki jsem nevěděl (je skrytá, mezi Články).
Ale po instalaci doplňku http://www.openoffice.cz/stahnout/doplnky/openoffice-cz už snadno přístupná.
A http://wiki.openoffice.cz/wiki/Zo%C5%A1 … _-_VLOOKUP je o něco jasnější.

Editoval jadd (22. 3. 2014 19:58:19)

Offline

Zápatí