Zaslal/a vovka.h 24.1.2016 13:23
Je všeobecně známé, že Excel pracuje na 15 platných cifer. V rámci tohoto pravidla je Excel schopný v buňce zobrazit celé číslo 999999999999999 a také s ním jako s celým číslem pracovat. Potřebuje k tomu jediné, a to numericky naformátovanou buňku (např. "0" nebo "# ##0"). Při obecném naformátování se nám od 12.cifry začne v buňce zobrazovat semilogaritmická podoba čísla (tzv.vědecký formát).
Z hlediska VBA je v této schopnosti práce s celými čísly na listu skryta dost významná zrada. Pro práci s dlouhými celými čísly má VBA k dispozici čtyřbytovou proměnnou Long se zaručeným rozsahem 9 platných cifer. Celá čísla z listu v rozsahu 10 až 15 cifer se tak ve VBA dostávají "do pásma nikoho".
Znalci Excelu mi mohou oponovat typem LongLong a Decimal; první z nich umí pouze 64bitový Excel, ten druhý neumí skoro nikdo. A to prosím nemluvím o skvělém doplňku xlPrecision, pro který není ani 200 platných cifer překážkou.
Na problém mne přivedl elninoslov, když začal skloňovat názvy jednotek zobrazeného času. To mi připomnělo notorickou úlohu slovního vyjádření finanční částky, požadovanou v některých úředních dokumentech. Existuje houf řešení této úlohy i pro Excel. Já jsem si přitom vzpomněl na někdejšího českého ministra financí, který veřejně přiznal, že neví, kolik nul má bilion. S vědomím, že Excel umí 15 celých cifer, rozhodl jsem se "pro pana ministra" napsat proceduru "částka slovy", která vy uměla i ty zrádné biliony.
Proceduru, která uměla všechny miliony, jsem si kdysi napsal. Když jsem ji teď chtěl rozšířit do bilionů, tvrdě jsem narazil. Proměnná Long umí něco přes dvě miliardy a dál ani ťuk. Když jsem ty biliony ale chtěl, musel jsem a věc z jiné strany.
Původně jsem patnáctimístné celé číslo rozdělil na "dolní Long" pro spodních devět řádů a "horní Long" pro zbylých šest řádů. To sice fungovalo, ale pro částku slovy to bylo dost neohrabané. Proto jsem přešel na rozdělení znakového řetězce s patnácti ciframi na pět tříznakových skupin pro jednotky, tisíce, miliony, miliardy a biliony. Z tohoto rozdělení už bylo poskládání částky slovy vcelku snadné. Jak rozdělení dlouhého celého čísla na dvě Long, tak trojmístné skupiny pro částku slovy najdete v příloze.
lubo napsal/a:
@marjankaj
Na pozici účetního bych Vás tedy s logárkem nebral.
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.