Často kladené otázky - Calc
TDF LibreOffice Document Liberation Project Community Blogs Weblate Nextcloud Redmine Ask LibreOffice Donate
Jak provést kumulativní výpočet pomocí iterací?
Kontext: Chcete sečíst následné hodnoty výsledku výpočtu. Jak postupovat, když víte, že v zásadě, když upravíte "zdrojové" hodnoty pro výpočet, bude se výpočet opakovat a nebude si "pamatovat" předchozí hodnotu?
V následujícím příkladu bude výsledek výpočtu nalezen v buňce C7:
=C10-C13+C16
Chcete zachytit nové hodnoty v C10, C13 nebo C16 a výsledek operace přidat k předchozímu výsledku.
S určitými omezeními toho lze dosáhnout pomocí iterace.
Vysvětlení
- Začněme s… možností opětovné inicializace akumulace. Dosáhneme toho pomocí hodnoty obsažené v "testovací" buňce. Například pokud C5 obsahuje nulu, akumulace bude znovu inicializována.
- Dále musíme nastavit krok iterace pomocí nabídky ▸ ▸ ▸ . Definování na 1 vede ke 2 výpočtům. Nechceme však k akumulaci přidat dvakrát C7. Řešení je jednoduché: vydělíte kumulativní výsledek dvěma (viz výše v E7).
- Minimální hodnota změny nepřímo definuje maximální zohledněnou hodnotu. Například s hodnotou 10 000 způsobí jakákoliv hodnota v C7, která je větší než 20 000, chybu 523 (Výpočet nekonverguje).
- Pokračujme samotným kumulativním výpočtem. Výsledek, který má být akumulován, byl již proveden v C7, ale tuto buňku nelze použít jako zdroj pro akumulaci, protože je nutné, aby byla akumulace aktualizována, když se změní některá ze "zdrojových" buněk pro výpočet (jedná se o buňky zobrazené na snímku oranžově). Výpočet se proto opakuje v E7 spolu s testem na opětovnou inicializaci a nezbytným dělením dvěma:
=IF(C5=0;0;E7+((C10-C13+C16)/2))
- Během načítání listu software přepočítává ... což je obtížné v případě kumulativních výpočtů. Měli byste proto učinit preventivní opatření pro deaktivaci tohoto výpočtu automaticky (nabídka ▸ ▸ ) a poté výsledek "ručně" přepočítat pomocí kláves Ctrl + ⇧ Shift + F9.
V příkladu je list chráněn (bez hesla), takže jsou přístupné pouze oblasti, kde se očekává zadání dat.