< návrat zpět

MS Excel


Téma: Práce s dlouhými celými čísly rss

Zaslal/a 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.

Příloha: zip29516_cislapreslong.zip (25kB, staženo 63x)
Zaslat odpověď >

Strana:  « předchozí  1 2
icon #029540
eLCHa
@vovka
Já bych řekl, že nejlepší je se vykvajznout na číselný formát. Otestovat, zda je v buňce hodnota, která je číslo a pak už pracovat s textem. Stejně je výsledkem text, se kterým už nic nedělám. Tak to mám já a kdybych do svého pole přidal další názvy, teoreticky můžu jít až ke Googol - dál už bych to změnil na nekonečno ;))) .citovat
icon #029544
eLCHa
@hav-ran
tiskne to i slovy? ;))

a umí to tohle?
9 815 153 574 256 925 010 105 008 456 005,456 248 187 459 248 867 5=devět kvintilionů osmset patnáct kvadriliard jednosto padesát tři kvadriliony pětset sedmdesát čtyři triliardy dvěstě padesát šest trilionů devětset dvacet pět biliard deset bilionů jednosto pět miliard osm milionů čtyřista padesát šest tisíc pět celých čtyři triliony pětset šedesát dvě biliardy čtyřista osmdesát jeden bilion osmset sedmdesát čtyři miliardy pětset devadesát dva miliony čtyřista osmdesát osm tisíc šestset sedmdesát pětcitovat
#029545
avatar
@elCHa
Pokud jde o slovní vyjádření částky, máme shodný názor na textové zpracování vstupu. Stačí se podívat do střev mé funkce Castka 1 . Nastavit mou funkci o další řády by byla čistě mechanická záležitost. Mně šlo pouze o dosažení hranice 15 cifer pro buňku.
U problému s celočíselným zpracováním dat a nedostatečným rozsahem typu Long pro 15 cifer v buňkách má zase pravdu Lubo s typem Currency. Asi jsem si kdysi pořádně nepřečetl, jak je Currency definovaná a zbytečně složitě jsem bez ní mnohokrát řešil to, co s ní řešit vůbec nemusím. Tahle věc mi do budoucna značně usnadní život 1 .citovat

Strana:  « předchozí  1 2

Uživatelské menu

Nejste přihlášen(a)
avatar\n

Menu

On-line nástroje

Formulář Faktura

Formulář Faktura IV

Oblíbený formulář Faktura byl vylepšen a rozšířen.
Více se dočtete zde.

Aktivní diskuse

Vynásobit hodnoty kurzem - Power Query

Alfan • 26.4. 7:56

Relativní cesta - zdroje Power Query

Alfan • 26.4. 7:54

Vynásobit hodnoty kurzem - Power Query

elninoslov • 26.4. 7:54

Vynásobit hodnoty kurzem - Power Query

lubo • 25.4. 19:18

Relativní cesta - zdroje Power Query

elninoslov • 25.4. 15:12

Relativní cesta - zdroje Power Query

Alfan • 25.4. 15:08

Relativní cesta - zdroje Power Query

elninoslov • 25.4. 14:21