< návrat zpět

MS Excel


Téma: Přehled zaokrouhlovacích funkcí Excelu rss

Zaslal/a 9.9.2015 17:45

V diskusi o zaokrouhlování se tady objevilo několik nepřesností při popisu funkcí listu pro zaokrouhlení. Vzhledem k tomu, že tyto funkce (s výjimkou ZAOKROUHLIT) prakticky nepoužívám, začal jsem mít z té diskuse v hlavě guláš.
Pro vlastní archiv jsem si zpracoval tabulku toho, co Excel nabízí. Měl bych sto chutí napsat několik peprných slov jak na adresu Microsoftu, tak zejména pro naše lokalizátory. Když se tak na tu tabulku koukám, ani se nedivím, že ve hře mezi uživateli Excelu nepanuje jasno.
Tabulka je v příloze. Je interaktivní, takže každý si může ověřit, jak které zaokrouhlování funguje. Komentář ponechám na vás.

Příloha: zip26779_testyzaokrouhleni.zip (9kB, staženo 49x)
Zaslat odpověď >

Strana:  « předchozí  1 2 3 4   další »
#026801
avatar

eLCHa napsal/a:


Navíc - pokud jsem to pochopil
CEILING, FLOOR jsou přeložené, ale ty s tečkou už ne...

No ak by to chceli dať do súladu, tak by museli preložiť
ROUNDUP -> zaokrouhlit.nahoru
ROUNDDOWN -> zaokrouhlit.dolů
a
CEILING a FLOOR neprekladať, teda český preklad zrušiť.

A toto by už asi problém bol.
Teší ma jedine to, že na Slovensku to nikoho nenapadlo prekladať. Aj keď pre používateľa neznalého angličtiny tie české názvy boli zrozumiteľnejšie.citovat
#026802
avatar
Pomalost UDF je jedna z rozšířených pověr o VBA. Samozřejmě lze napsat UDF, které nám umožní uvařit si kafe, než se spočítá. Ale znám i taková UDF, která v rychlosti moc nezaostávají za složitějšími vzorci, a někdy jsou dokonce rychlejší. RoundX mezi ty nejrychlejší funkce patřit nebude, ale s výjimkou obsluhy velkých oblastí na listu nebude ani příliš zdržovat. Vzhledem k tomu, že jsem si dělal výkonové testy na některé ze svých UDF, vím co říkám.citovat
#026803
avatar
@Vovka
Ja nemám nič proti UDF. Sám ich používam.
Ale ak by som chcel, aby sa súbor dal otvoriť napríklad v OPEN OFFICE (každý nemusí mať excel) tak sa snažím UDF používať čo najmenej. Ale toto je tu o exceli, takže to je iba taká malá poznámka.citovat
#026805
avatar
to marjankaj: OO Calc se tady opravdu moc nezmiňuje. Jeho StarBasic jsem si prohlédl jen zběžně, ale z logiky věci se mi zdá, že by mohl UDF umět. Víc než z devadesáti procent má VBA se StarBascem shodný kód. Zatím jsem si ale nenašel čas na to, abych otestoval, jak nejlépe převést VBA do StarBasicu a následně ho odladit. Kdyby s tím někdo měl zkušenost, rád se poučím!
Jinak svůj RoundX jsem napsal spíš kvůli tomu, abych si dokázal, že to dokážu. Jak už jsem napsal, všechno zaokrouhluji stejnou standardní funkcí, pro níž ovšem vhodně upravím vstupní parametry. Vzorec na listu u mne aby pohledal!citovat
#026808
avatar
Ze zvědavosti jsem si provedl výkonový test pro milion výpočtů funkce listu Ceiling proti shodnému zadání pro milion výpočtů funkce RoundX. Toto je výsledek srovnání:

milion realizací =Ceiling(123.456, 0.1) ........ 4,570 sec,
milion realizací =RoundX(123.456, 0.1, 1) ... 5,551 sec.

Ano Ceiling počítá o něco rychleji, ale sekunda rozdílu na milion výpočtů celou dobu zpracování úlohy prodlouží právě o tu jednu sekundu!citovat
#026831
avatar
Pro svůj archiv jsem přehled upravil a doplnil o některé poznatky z proběhlé diskuse. Zejména jsem si ale do přehledu vložil ten výkonový test, o kterém jsem se již zmínil. Kdo chce, může si novou verzí přepsat tu původní.
Mně osobně se tahle diskuse opravdu líbila a přinesla mi skutečný užitek. Na některých otázkách jsme se vzácně shodli. O jiných si myslím, že stojí zato je zrekapitulovat:
Lubo: mně by také zajímalo, proč přidávají další fce, když stačí opravit ty staré. Pokud se bojí zpětné kompatibility, tak se bojí špatně.
Obávám se, že to není tak jednoduché. Pokud by oprava změnila chování funkce a v některém starém sešitu by tu chybou někdo vědomě využíval, začal by se ten starý sešit chovat vadně. Změna chování funkce si podle mne přímo vynucuje nové jméno funkce.
marjankaj: No pri zaokrúhľovaní záporných čísel pri MROUND možno použiť napríklad =MROUND(A1;SIGN(A1)*5)
Tohle by v žádném případě nemělo zaniknout! Je to pěkné a úplné řešení toho problému; jenom by se nemělo zapomenout na to, že k tomu je také nutno zakázat záporný interval pro druhý parametr. Jen se sám sebe ptám, jak tahle zjevná chyba funkce mohla uniknout Microsoftu...
elCHa: Určitě bych ale nepoužil pomalou UDF a raději se obrátil na rychlejší ROUND.
Každé tvrzení má mít své opodstatnění. Proto jsem provedl svůj výkonový test, o kterém píšu shora.
elCHa: Navíc - pokud jsem to pochopil CEILING, FLOOR jsou přeložené, ale ty s tečkou už ne...
Jak to tak vypadá, jména funkcí listu jsou přeložena vždycky a všechna. Jen u některých je pro "překlad" použito jejich originální znění. Jinými slovy: moje brojení proti českým názvům má snadné technické řešení. To spočívá v prosté výměně jednoho souboru v knihovně Excelu za jiný. V tom okamžiku začnou vzorce na listu pracovat s originálními jmény funkcí (ale s českou interpunkcí !!). Kdybych hodně hledal, tak jména těch souborů k záměně někde vyštrachám.
Příloha: zip26831_funkceroundx.zip (47kB, staženo 19x)
citovat
#026832
avatar
Myslím, že prechod od českých názvov na anglické by bolo najjednoduchšie riešenie. Ale pre českého používateľa menej zdatného v angličtine by to mohlo byť problematické. Sám som robil paralelne na jednom PC v češtine a na inom zase v slovenčine(teda anglicky) a trochu mi to trvalo kým som sa zabehal. A o finančných výpočtoch ani nehovorím(IPMT PMT a pod...)
Potom by zostala problematická funkcia MROUND kde to pri záporných číslach nezvládli.citovat
#026833
avatar
Odklon od českých názvů k angličtině (a následné zapomenutí těch českých názvů) by vážně znehodnotilo spoustu české literatury jak v knižní, tak v elektronické podobě, která s českými názvy samozřejmě pracuje. Proto je celá diskuse o opuštění českých názvů trochu akademická.
Důkazem, že nejsme sami, kdo si z lokálních názvů funkcí utahuje, je půvabný návrh polského názvu pro IF:
CHCELIPANTOTOBOTAMTO.
Mohu uvést českou (a zcela autentickou) podobu podmíněného příkazu v jazyce MAT-5 (jazyk vymyslel Ing.Formandl kolem roku 1965):
JELI A3:B20 SKOKNA 120:150:90
(vyhodnoť rozdíl A3 a B20; pro <0 skoč na řádek 120, pro =0 na řádek 150 a pro >0 skoč na řádek 90).
Než jsem potkal Excel, věřil jsem, že už takovou ptákovinu nikdy nepotkám. Mýlil jsem se ...citovat
icon #026839
eLCHa
@Vovka
mno když se Vám, tak líbila. Prosím, abyste si žádný argument nebral osobně.

Obávám se, že to není tak jednoduché. Pokud by oprava změnila chování funkce a v některém starém sešitu by tu chybou někdo vědomě využíval, začal by se ten starý sešit chovat vadně. Změna chování funkce si podle mne přímo vynucuje nové jméno funkce.
Ano toto je pravda. Když vezmeme v úvahu, že na světe používají excel miliony uživatelů tak je téměř jisté, že tento případ někde existuje. Možná jich budou i tisíce. Pokud toto někdo má, jedná se o pokročilého uživatele, který na to přijde, zjistí příčinu a opraví si. Já teď jen přemýšlím, jestli je lepší přesvědčit "pár" pokročilých uživatelů, že si mají svá řešení opravit nebo nutit miliony ostatní uživatelů aby s každou verzí kontrolovali, jestli náhodou není nová varianta jejich funkce. Rozhodnutí není na mne, přesto si myslím, že takto je to špatně. Že to uživatelé dělat nebudou lze vidět i tady na tomto fóru.

Tohle by v žádném případě nemělo zaniknout! Je to pěkné a úplné řešení toho problému
Není to úplné řešení. Co tohle?=MROUND(A1;SIGN(A1)*A2)
Každé tvrzení má mít své opodstatnění. Proto jsem provedl svůj výkonový test, o kterém píšu shora
Toto je věčná diskuse ne nepodobná POSUN vs INDEX (volatilní vs nevolatilní). Když jsem začínal, tak jsem si to také zjišťoval - hledal co je lepší? Vzhledem k tomu, že excel je napsán (nebo byl, nevím jak je to teď) v jazyce C, resp. C++ a UDF jsou ve VB... - ale to už je akademická debata. PC se stále zrychlují tak toto srovnání už je asi zbytečné. Teď ale ta praktická část. Nezpochybňuji, že UDF může být rychlejší (stejně jako jiné funkce - já si například napsal vlastní filtr souborů v adresáři, protože integrovaný na 1 pc jel bleskově a na druhém několik minut!). Ale
1) UDF je pomalejší, protože si ji musím napsat a odladit.
2) UDF je pomalejší, protože musím uložit soubor s povolenými makry (nebo uložit do bezpečného adresáře).
3) UDF je pomalejší, protože musím při spuštění povolit makra.
4) UDF je nehorázně otravná a pomalá, když potřebuji ladit nějaký projekt (krokovat) a je v listu obsažena několikrát (mohou to být stovky - vlastní zkušenost).
Mohl bych pokračovat, ale toto pro mne jsou hlavní důvody. A ještě jeden - za excel jsem si zaplatil a proto ho nepoužívám jako DataGrid, ale jako tabulkový kalkulátor. Pro mne je v excelu nejlepší programátor ten, který napíše nejméně kódu.

A k Vašemu výkonovému testu - záleží PC od PC. Možná Vás potěší, že u mne to v laboratorních podmínkách (Váš test - bez vlivu na list) RoundX jednoznačně vyhrála.
Pak jsem ji integroval do souboru, který obsahuje desetitisíce výpočtů a události change a je prošpikován kódem. Tam už prohrála a to jsem musel počet cyklů snížit na 100 (oba spodní případy - u toho prvního jsem zapomněl změnit text).citovat
icon #026840
eLCHa
Výsledek testů v příloze
Příloha: jpg26840_testy.jpg (83kB, staženo 20x)
26840_testy.jpg
citovat

Strana:  « předchozí  1 2 3 4   další »

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