Ontola > Elektronika > diskuze
 v7h
| Nahlásit

Jak v excelu najdu funkci zaokrouhlit na počet PLATNÝCH číslic?

Například aby mi zaokrouhlilo na jednu platnou číslici a tedy 0,000025698 zaokrouhlilo na 0,00003...

12 reakcí

| Nahlásit
Na to není třeba funkci, na to stačí rozšířit počet desetinných míst, ve tvém případě na pět.
| Nahlásit
Já se teda původně neptala, ale zaujalo mě to také - a co když je to číslo pokaždé jinak velké? To se musí pro každé nastavit ta buňka zvlášť?
| Nahlásit
Jo takhle... no jasně, to by se muselo nastavit pro každou buňku zvlášť... Což ovšem není řešení tvé situace.
| Nahlásit
Funkcece se jmenuje ZAOKROUHLIT

Syntaxe:

ZAOKROUHLIT(číslo;číslice)

Číslo - je číslo, které chcete zaokrouhlit.

Číslice - určuje počet číslic, na které chcete číslo zaokrouhlit.

Pokud je !číslice! větší než 0 (nula), je číslo zaokrouhleno na zadaný počet desetinných míst.
Jestliže je číslice rovno 0 (nula), je číslo zaokrouhleno na nejbližší celé číslo.
Pokud je číslice menší než 0 (nula), je zaokrouhleno číslo vlevo od desetinné čárky.

Příklad:

=ZAOKROUHLIT(2,15;1) Zaokrouhlí číslo 2,15 na jedno desetinné místo. (2,2)
=ZAOKROUHLIT(2,149;1) Zaokrouhlí číslo 2,149 na jedno desetinné místo. (2,1)
=ZAOKROUHLIT(-1,475;2) Zaokrouhlí číslo -1,475 na dvě desetinná místa. (-1,48)
=ZAOKROUHLIT(21,5;-1) Zaokrouhlí číslo 21,5 na jedno desetinné místo vlevo od desetinné čárky. (20)
| Nahlásit
No to jsem pochopila už z toho prvního příspěvku, ale to neřeší tu situaci, že budu mít sloupec třeba 150 čísel, které každé bude jinak velké, některé bude nenulové už před desetinou čárkou, některé až za ní na prakticky kterémkoliv řádu. Jestli jsem to dobře pochopila, tak původní tazatel se ptal, jak to zaokrouhlit na první nenulovou číslici -a to v obecné rovině. Z tvé odpovědi vyplývá, že to nejspíš nelze a musí se všechna nastavit zvlášť, konkrétně - podle počtu nul za desetinnou čárkou ... To je teda práce :o((( A pokud by se údaje na jednotlivých řádcích měnily (třeba týdně - zápis nějakých naměřených hodnot), bylo by to prakticky nepoužitelné ...
| Nahlásit
Řešením je definice vlastní funkce ve VBA. Mohla by vypadat třeba takto:
Function Plat_Mist(a, m As Double) As Double
b = 1
c = a
While c < 1
b = b * 10
c = c * 10
Wend
c = Round(c, m - 1)
Plat_Mist = c / b
End Function
V sešitu pak v buňce "=Plat_Mist(A1;1) ; Číslo v buňce A1 bude zaokrouhleno takto: Číslo větší naž 1 na celé číslo. Číslo menší než 1 na 1 platnou číslici.
Pokud v sešitu nejsou jiná makra, klávesou Alt+F11 otevřemeeditor VBA. Vlevo ve sloupci projektů vybereme svůj sešit, rozklikneme (rezepíše listy). Levou myší označíme Thisworkbook našeho sešitu, klikneme na něj pravou myší, zvolíme Insert a Module.
Do okna, které se otevře, nakopírujeme zdrojový text funkce. Nyní by se v listu mezi Vlastními funkcemi měla objevit i funkce Plat_Mist. Té je potřeba zadat dva parametry. Prvním je číslo, které se má zpracovat, druhým je počet platných číslic. Omezení počtu platných číslic neplatí pro čísla větší než 1, která se zaokrouhlují na celé číslo.
| Nahlásit
Hm, tak to je dost složité a trošku se v tom začínám ztrácet (ještě, že to na nic nepotřebuju já, ale původní tazatel). Přesto mě to ale zajímá. Myslím, že to jakž takž chápu až do zadání druhého parametru - počtu platných číslic. Znamená to, že když zadám jako počet platných číslic číslo jedna, zaokrouhlí mi to každé číslo menší než 1 na číslo, které bude vypadat laicky řečeno: nula celá, libovolný počet nul, pokaždý jiný a pak to zaokrouhlené jedno číslo? Že ta funkce bude fungovat vždycky dobře, ať už se to první platné číslo nachází na jakémkoliv řádu?
Takovou funkci bych tedy sestavit asi nedokázala, ale je dobré vědět, kde se zeptat, kdybych něco takového někdy potřebovala. Díky za vysvětlení.
| Nahlásit
Funguje to následovně: While c<1 testuje zpracovávané číslo. Pokud je menší než 1, spustí se cyklus. Každým průchodem cyklu se 10x zvětší jednak proměnná c (ve které je zpracovábané číslo) a jednak proměnná b s počáteční hodnotou 1. Wend vrací cyklus na test proměnné c . Jakmile proměnná c dosáhne nebo překročí hodnotu 1, cyklus se ukončí. V proměnné b je nyní mocnina 10, kterou se postupně násobilo původní číslo, v proměnné c příslučný násobek. Ten se zaokrouhlí na požadovaný počet míst a po zaokrouhlení se vydělí b. Příklad: mějmě vstupní číslo 0,00154 a chceme zaokrouhlit na 2 platné číslice. Po třetím průchodu cyklem bude hodnota c = 1,54 a b= 1000. Funkce Round(1,54;1) = 1,5 a funce vrátí hodnotu 1,5/1000 = 0,0015.
| Nahlásit
Díky za poznámku. Dodatečně jsem si uvědomil, že funkce funguje jen pro kladná čísla. Nulová hodnota a záporné číslo by vedlo k nekonečné smyčce. Bude tedy třeba makro upravit:
Function Plat_Mist(a, m As Double) As Double
b = 1
c = a
If c < 0 Then
b = -1
c = c * b
End If
If c <> 0 Then
While c < 1
b = b * 10
c = c * 10
Wend
c = Round(c, m - 1)
End if
Plat_Mist = c / b
End Function
Úprava spočívá v tom, že je li upravované číslo záporné, nastaví se proměnná b na hodnotu -1 a vynásobí se jí c, čímž se převede na kladné číslo. Pak se testuje, jestli je proměnná c=0. Pokud ano, celý cyklus včetně zaokrouhlování se přeskočí. Nakonec se funkci přiřazuje výstupní hodnota. V případě vstupního záporného čísla je sice c kladné, ale dělí se záporným b, takže výsledek je záporný.
| Nahlásit
díky moc za rady, pomohl Mezkův komentář, akorát jsem si nenapsal novou funkci ale udělal to přímo v excelu s využítím pár políček :)
| Nahlásit
Potřeboval jsem zaokrouhlit číslo na určitý počet platných číslic, v Excelu jsem funkci přímo pro toto nenašel, tak jsem googlil a dostal jsem se sem. Definovat si vlastní funkci je super, (ještě jsem to nedělal, ale jestli budu mít víc času, pokusím se o to), ale myslím, že pár lidí ocení, když se tomu budou moci vyhnout. Napadlo mě toto: =ZAOKROUHLIT(vstup;-ZAOKR.DOLŮ(LOG(vstup);1)+N), kde "vstup" je číslo které zaokrouhluju a "N" je N='počet platných číslic na který chci zaokrouhlit'-1, tzn. pokud chci zakrouhlit na 1 platnou číslici, N=0 atd...A ještě k prvnímu komentáři: Pokud jsem to dobře pochopil, tak rada je nastavit počet desetinných míst přes formát...jenže nastavení formátu ovlivní opravdu pouze formát, ve kterém je číslo zobrazeno a excel samozřejmě dále počítá s číslem, které je obsaženo (ne zobrazeno) v buňce, na max. 15 (tuším) desetiných míst. Když už tedy opominu to, že tazatel se ptal přímo jak číslo 'zaokrouhlit'...
| Nahlásit
Skvěle to funguje. Moc díky.
 Anonym
Odpovídat lze i bez registrace. Dodržujte pravidla Ontoly
Vložit: Obrázek