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

#1 29. 11. 2013 16:50:37

kohys
Člen
Registrace: 31. 1. 2011
Příspěvků: 6

Nerozumím chování funkci MATCH - VYŘEŠENO

Zdravím,

mám po řadě tyto roky:

2007
2008
2009
2010
2011
2012
2013
2014
2013
1899
1899

Spustím nad nimi funkci =MATCH(2013;B1:B11), dostanu výsledek 9. Tedy výskyt až po řadě druhého roku 2013. Nemělo by MATCH vracet odkaz na první výskyt roku 2013, tedy číslo 7? Pokud je MATCH bez parametru, myslel jsem, že předpokládá, že data jsou srovnané od nejmenšího po největší. Nerozumím tomu, proč když po roce 2013 v zadání následuje rok 2014, "dívá se" MATCH ještě za rok 2014.

Pokud zkusím tento příklad:

2007
2008
2009
2010
2011
2012
2013
2014
2012
1899
1899

a vyhledávám rok 2012, dostanu výsledek 6 a ne 9. Prosím o vysvětlení. Děkuji.


_________________________________________________
Značím jako vyřešené


;o)

Editoval sedlacekdan (2. 3. 2014 14:02:44)

Offline

#2 29. 11. 2013 18:07:32

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

Re: Nerozumím chování funkci MATCH - VYŘEŠENO

Tam asi bude problém s tím, že se jedná o datumy a ne obyčejná čísla. Nastevení je na tříděná data tedy vzestupně a sestupně. Možné je použít i jiné funkce-
Ten rok 1899 odpovídá číslu 1 - každý den má + 1 takže sloupec není setříděný a match je na to choulostivý. Písněte na co to potřebujete a uděláme to jinak.


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

#3 30. 11. 2013 01:26:30

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

Re: Nerozumím chování funkci MATCH - VYŘEŠENO

Mrkni se na poslední parametr (který jsi explicitně nezadal).

Pokud je testována přesná shoda match(..;..;0) hledání skutečně sekvenčně prochází zadanou oblastí a na první nalezené shodě se zastaví.

Pokud je zadána přibližná shoda, funkce používá rychlejší způsob hledání.
V případě chybějícího parametru nebo 1 funkce předpokládá vzestupně setříděný seznam a používá variantu binárního hledání. Tj. funkce vybere hodnotu uprostřed prohledávané oblasti, když je tato hodnota menší než hledaná, rozpůlí oblast mezi vybraným a posledním prvkem, podívá se co je uprostřed, ...

V tomto režimu, pokud je prohledávaný seznam podle očekávání setříděný, najde poslední hodnotu, která je menší nebo rovna hledané hodnotě. Pokud seznam setříděný není, nemusí funkce hodnotu ani najít, i když v seznamu je. Prostě funkce neporovnává všechny hodnoty - přeskakuje. Za to je ale pro rozsáhlé seznamy cca 10000x rychlejší než sekvenční hledání (s parametrem 0).

Z toho by mělo být mj. jasné, že seznam musí být setříděný celý, ne jen začátek.

Editoval lp. (30. 11. 2013 01:33:50)

Offline

Zápatí