Fórum pro uživatele kancelářského balíku OpenOffice | LibreOffice
 

#1 Re: Calc » Součet hodnot v určitých sloupcích z určitých řádků - VYŘEŠENO » 5. 5. 2024 23:55:58

lp.

Dost složité. Stačí správně načíst csv soubor. V dialogu při otevření csv, lze kromě hlavičky určit i typ načítaných sloupců.

Ve spodní tabulce s náhledem souboru si posuvníky zobrazte začátek tabulky. Pak klik na hlavičku sloupce (v náhledu) - mám tam typ "Standardní", a v rozbalovacím menu typ sloupce vyberte správný typ. Mám starší verzi LO a v případě čísel s desetinnou tečkou musím vybrat (pro někoho ale ne pro mne zcela pochopitelný) typ "Anglicky USA". Dá se i vybrat více sloupců, předchozí výběr se standardně přidrží pomocí ctrl.

Pak už lze data zpracovat normálně. Tj. sumif, nebo tabulku rozdělit a použím normální sum, ... Na nějaké pomocné slouopce a value můžete zapomenout.

#3 Re: Calc » Podmíněný součet vzorců, ale ne odkazů » 18. 1. 2024 19:26:56

lp.

Četl jste, co jsem napsal?

První otázka zněla, jak napsat podmínku...

Pak jsem popsal, proč to nefunguje + pro fungování dotazu potřebujete aby isref s polem v argumentu vrátilo také pole.

Mimochodem, nejsem si jist, jestli víte, co chcete. isref vyhodnocuje jakýkoliv odkaz jako odkaz, tedy isref(INDEX(A1:A12;5;1)) = pravda.

Nouzovým řešením může být pomocný sloupec. Jak vyhodnotit obsah buňky pomocí isref viz výše.

#4 Re: Calc » Podmíněný součet vzorců, ale ne odkazů » 16. 1. 2024 23:32:44

lp.

SUMPRODUCT( A1:A10 ; --ISFORMULA( A1:A10 ); --NOT(ISREF( A1:A10 )) )

nebo

SUMPRODUCT( A1:A10 ; --ISFORMULA( A1:A10 ) * NOT(ISREF( A1:A10 )) )


Problém je ale ve funkci ISREF:

Obsah buňky A1 = SUM(A2):

=isref(a1) = pravda (protože a1 je odkaz, na obsah se funkce nedívá)

Vnutíme do argumentu výraz v buňce:

=ISREF(INDIRECT(MID(FORMULA(A1);2;10000))) = nepravda (protože SUM(A2) odkaz není)


ale při použítí na pole vrací:

=ISREF(A1:A10) = pravda (protože A1:A10 je platný odkaz, maticově to neveme)

a

=ISREF(INDIRECT(MID(FORMULA(A1:A10);2;10000))) = nepravda (indirect odkazy vrátí, ale isref to vyhodnotí jako jeden výraz)

#5 Re: Calc » Jde nějak složit obsah buňky na základě jiných a sebe sama? » 16. 1. 2024 23:00:50

lp.

Jednoduchá odpověď : Částečně, ale nedělal bych to.

Nejprve je nutné si uvědomit, že do buňky můžeme zadat buď číslo nebo vzorec. Tj. pokud zadáte hodnotu, tak si výpočet vymažete.

Tedy pokud hodnotu chcete zadávat, lze napsat něco jako: =if(c1="vzorec"; A1 & IF(Bn>0;"P";IF(Bn<0;"M";"Z")) & self(); 3)   --- 3 je zadané číslo, tj. zadává se do vzorce, v c1 je přepínač, umožní zadat hodnotu, případně může hodnoty zresetovat)

Dále. Pokud se chcete odkazovat na vlastní hodnotu, je nutné povolit iterace. Doporučuji současně nastavit počet iterací na 1 a nastavit manuální přepočet. Tak bude možné tu obludu krokovat.

Dál je nutné vyřešit, jak při aktualizaci zachovat původní hodnotu (nejspíš přes pomocnou buňku/buňky)
a nějak nastavit stopku, aby se řetězec nechtěně nerostl.

Dál už se mi to nechce vymýšlet. Základ máte, část problémů lze řešit přes zamknutý řetěz pomocných buněk, ale to už je docela alchymie.

#6 Re: Calc » STYLE v CONCATENATE - VYŘEŠENO » 3. 11. 2023 15:00:22

lp.

Pokud je Text v oblasti stejný, lze použít formát: '"Text:" 0 000'

Potom se zobrazí Text i číslo a hodnotou buňky bude stále spočítaná suma.

Takový formát se pak dá přiřazovat i původním vzorcem pomocí STYLE.

#7 Re: Calc » určení sloupce s daty VYŘEŠENO » 22. 9. 2023 13:06:19

lp.

A co jednoduše použít rozšířený filtr?

#8 Re: Calc » Přidání HTML znaků do buněk - VYŘEŠENO » 31. 7. 2023 21:28:27

lp.

Když dám ukázku (více řádků) uložit jako html (calc), dostanu:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">

<html>
<head>
	
	<meta http-equiv="content-type" content="text/html; charset=windows-1250"/>
	<title></title>
	<meta name="generator" content="LibreOffice 7.0.4.2 (Windows)"/>
	<meta name="created" content="2023-07-31T22:10:39.922000000"/>
	<meta name="changed" content="2023-07-31T22:16:36.258000000"/>
	
	<style type="text/css">
		body,div,table,thead,tbody,tfoot,tr,th,td,p { font-family:"Liberation Sans"; font-size:x-small }
		a.comment-indicator:hover + comment { background:#ffd; position:absolute; display:block; border:1px solid black; padding:0.5em;  } 
		a.comment-indicator { background:red; display:inline-block; border:1px solid black; width:0.5em; height:0.5em;  } 
		comment { display:none;  } 
	</style>
	
</head>

<body>
<table cellspacing="0" border="0">
	<colgroup width="1128"></colgroup>
	<tr>
		<td height="32" align="left"><font face="Liberation Mono,Courier New">Táto bunda je absolútnym hitom tejto sezóny. Je ideálna na elegantný alebo športový štýl. Jej dokonalý strih a kvalitné spracovanie vám poskytnú maximálne pohodlie a štýl. Odporúčame!</font></td>
	</tr>
	<tr>
		<td height="32" align="left"><font face="Liberation Mono,Courier New">Farba: zelená</font></td>
	</tr>
	<tr>
		<td height="62" align="left"><font face="Liberation Mono,Courier New">Zloženie: 100% polyester.</font></td>
	</tr>
	<tr>
		<td height="77" align="left"><font face="Liberation Mono,Courier New">Materiál: 85 cm.<br>Pás: 68 cm<br>Busta: 87 cm<br>Výška: 172 cm<br>Veľkosť topánok: 39</font></td>
	</tr>
	<tr>
		<td height="77" align="left"><font face="Liberation Mono,Courier New">Modelka má na sebe veľkosť: S </font></td>
	</tr>
</table>
<!-- ************************************************************************** -->
</body>

</html>

případně, pokud je to v jedn0 buňce, tak toto:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">

<html>
<head>
	
	<meta http-equiv="content-type" content="text/html; charset=windows-1250"/>
	<title></title>
	<meta name="generator" content="LibreOffice 7.0.4.2 (Windows)"/>
	<meta name="created" content="2023-07-31T22:10:39.922000000"/>
	<meta name="changed" content="2023-07-31T22:24:00.511000000"/>
	
	<style type="text/css">
		body,div,table,thead,tbody,tfoot,tr,th,td,p { font-family:"Liberation Sans"; font-size:x-small }
		a.comment-indicator:hover + comment { background:#ffd; position:absolute; display:block; border:1px solid black; padding:0.5em;  } 
		a.comment-indicator { background:red; display:inline-block; border:1px solid black; width:0.5em; height:0.5em;  } 
		comment { display:none;  } 
	</style>
	
</head>

<body>
<table cellspacing="0" border="0">
	<colgroup width="1128"></colgroup>
	<tr>
		<td height="241" align="left"><font face="Liberation Mono,Courier New">Táto bunda je absolútnym hitom tejto sezóny. Je ideálna na elegantný alebo športový štýl. Jej dokonalý strih a kvalitné spracovanie vám poskytnú maximálne pohodlie a štýl. Odporúčame!<br><br>Farba: zelená<br><br>Zloženie: 100% polyester.<br><br>Materiál: 100% polyester:<br><br>Materiál: 85 cm.<br>Pás: 68 cm<br>Busta: 87 cm<br>Výška: 172 cm<br>Veľkosť topánok: 39<br><br>Modelka má na sebe veľkosť: S</font></td>
	</tr>
</table>
<!-- ************************************************************************** -->
</body>
</html>

Já bych nic neprogramoval.

#9 Re: Calc » Sčítaní barevných buněk / Výpočet na základě barvy - VYŘEŠENO » 9. 5. 2023 22:58:39

lp.

Kdysi jsem to zkoušel. Hledat to už nechci.
Tak aspoň ta rada.
1. Je to špatný nápad, zkus jiný způsob (viz např. doporuční od kantora).
2. Pokud na tom trváš, napiš si na to funkci.

#10 Re: Calc » CALC Přestane přepočítávat některé vzorce » 14. 2. 2023 01:18:57

lp.

"Všechny instance..." Problém by mohl být v v manuáním přepočtu některého otevřeného sešitu. Zkontrolujte, jestli všechny otevřené sešity mají nastavený automatický přepočet.

Hádám s ohledem na to, že calc hodně kopíruje chování excelu, tam se přepočet nastavuje podle prvního otevřeného sešitu - pokud je manuální, je manuální všude.

#11 Re: Calc » VLOOKUP - změna oblasti pro vyhledávání - VYŘEŠENO » 1. 2. 2023 17:52:03

lp.

Lze.

Prostě si index dosaďte vzorcem.

=VLOOKUP($A2;$Data_2.$A$2:$Data_2.$C$13;match("jmeno sloupce", $Data_2.$A$1:$Data_2.$C$1;0);0)

#12 Re: Calc » Změna formátování textu na ...(třeba datum) - apostrof - VYŘEŠENO » 2. 1. 2023 11:29:03

lp.

Máte v tom zmatek.

Slovo formát je trochu přetíženo. Formát buňky (jak se zobrazuje, jak se chová) ovlivňují dva atributy - jeden obsahuje formátovací řetězec, ten druhý je formátovací znak (jméno si nepamatuji). Ten znak má přednost (používaných znaků může být víc - ', ", ^). Formátovací znak je vidět v řádku vzorců v první pozici. Je to ale hodnota atributu, ne hodnota buňky. Pokud je odstraněn (např. při editaci hodnoty v řádku vzorce), je formát buňky určen formátovacím řetězcem.

Formátovací znak (apostrof v první pozici buňky) tedy není součástí hodnoty. Nelze ho smazat nahrazením protože tato funkce prohledává hodnotu/vzorec buňky. (Jedině F2 nebo makro.)

Při importu ale formátovací řetězec, jak snadno zjistíte, zpravidla není text ("@").

Hromadně uvedené případy nesprávného formátu běžně opravuji nahrazováním, funguje u lo calc, v oo calc (poslední verzi už netestuji), a dokonce i u excelu. Jak to provést viz předchozí text (najít ':', nahradit ":"). Toto odstraní formátovací znak a calc výslednou hodnotu interpretuje podobně, jako když je zadána do buňky ručně.

Je mi jedno co použijete, důležitá je spokojenost s výsledkem.

#13 Re: Calc » Změna formátování textu na ...(třeba datum) - apostrof - VYŘEŠENO » 31. 12. 2022 18:28:59

lp.

Buď jste nahrazení nezkusil nebo je tam nezmíněný problém.

Zkusím to podrobněji.

Pokud zapisuji do buňky čas, tak ho zapíši jako text a calc mi to zkonvertuje na správný typ hodnoty (čas). Tj. explicitně žádné =Value("00:15:01") psát nemusím.

Pokud v buňce nahradím hodnotu za jinou, tak zpracování výsledné hodnoty calc zkontroluje a výsledek také zkonvertuje na správný typ hodnoty.

Toho mohu využít a nahradit hodnotu v buňce tak, aby výsledný textový zápis byl stejný jako původní a pokud je text korektní zápis např. času, tak calc předpokládá, že se hodnota změnila, zpracuje ji, jako když by se zadala z klávesnice a zkonvertuje ji na správný typ. Nahrazení mohu provést i hromadně.

Pochopitelně, podmínkou je (stejně jako u zadávání do prázdné buňky), že formát buňky není text.

Pomocí regulárního výrazu lze nahradit libovolnou buňku za stejnou. Obvykle ale nechci zasahovat do všech buněk v oblasti, proto při konverzi času volím dvojtečku za dvojtečku.

Jinak proti vzorcům nic nemám, jen vyžadují další prostor a víc psaní. Určitou výhodou vzorce může být kombinace hodnot z více buněk, ale to není tento případ. Tady je to na pár kliků.

Také lze použít funkci "Text do sloupců".

#14 Re: Calc » Změna formátování textu na ...(třeba datum) - apostrof - VYŘEŠENO » 27. 12. 2022 17:15:56

lp.

Zkuste něco najít a nahradit za to samé. Tady třeba dvojtečku za dvojtečku.

#15 Re: Calc » Skládání logických funkcí u filtru » 11. 7. 2022 17:44:55

lp.

Tak jsem se na to podíval...

ID lze filtrovat ve filtru pole, výdaje s podmínku NEBO ve filtru dat.
Dohromady to dá potřebnou podmínku AND.

#16 Re: Calc » Skládání logických funkcí u filtru » 11. 7. 2022 00:09:38

lp.

Tip jen z hlavy, tohle jsem zatím nezkoušel.

výdaj1 <> 0 NEBO výdaj2 <> 0 AND ID = zadané číslo

nebo "roznásobení":

výdaj1 <> 0 AND ID = zadané číslo NEBO výdaj2 <> 0 AND ID = zadané číslo

#17 Re: Calc » Skládání logických funkcí u filtru » 9. 7. 2022 22:55:58

lp.

Moc to nechápu, tak jen k logice.

ludviktrnka napsal(a)

Tedy ID=číslo AND (Výdaj1 <> 0 OR Výdaj2 <> 0). Právě nevím jak nastavit tu závorku, tedy vkastně pořadí vyhodnocení. Samozřejmě to lze snadno vyřešit pomocným sloupcem Výdaj3 = (Výdaj1 + Výdaj2) <> 0, ale rád bych se tomu vyhnul, pokud to jen trochu půjde. Zkusil jsem různé pořadí, ale nedaří se.

Pokud mi nevychází priorita operací, tak doplním závorky:
(ID=číslo) AND ( ( Výdaj1 <> 0 ) OR ( Výdaj2 <> 0 ) )

ludviktrnka napsal(a)

EDIT: Ještě doplňuji, má to fungovat tak že pokud výdaj1+výdaj2 = 0 tak se řádek nezobrazí.

Tohle funguje jen, když mají oba výdaje stejné znaménko, Tedy pokud to má být ekvivalent logické alternativy. Jinak se mohou potkat výdaje s opačným znaménkem...

#18 Re: Calc » změna adresy buňky ve vzorci - VYŘEŠNO » 1. 5. 2022 21:52:05

lp.

Pokud potřebujete poslední číslo ve sloupci s čísly, tak se dá použít funkce vlookup:

=VLOOKUP(1e307;B:B;1;1)

Hledané číslo musí být hodně velké.

#19 Re: Calc » Rozložení textu z buňky do více buněk » 10. 1. 2022 14:41:48

lp.

Zkuste použít funkci FILTERXML - dělá do zjednodušeně "text do sloupců", jen vzorcem.

Tady je jen jeden oddělovač - mezera: 

=FILTERXML("<t><y>"&SUBSTITUTE(TRIM(A1);" ";"</y><y>")&"</y></t>";"/t/y")

Více oddělovačů - buď regulární výraz nebo vícekrát substitute - pro ilustraci je to nepřehledné.

Položky v řádku - funkce TRANSPOSE


Pokud máme pole, získat z něho jednu hodnotu je snadné (choose, index, ...), tady je použit index a vybrána poslední hodnota:

=INDEX(FILTERXML("<t><y>"&SUBSTITUTE(TRIM(A1);" ";"</y><y>")&"</y></t>";"//y");COUNTA(FILTERXML("<t><y>"&SUBSTITUTE(TRIM(A1);" ";"</y><y>")&"</y></t>";"//y")))

A tady je druhá hodnota:

=INDEX(FILTERXML("<t><y>"&SUBSTITUTE(TRIM(A1);" ";"</y><y>")&"</y></t>";"//y");2)

#20 Re: Calc » Soubor *.ods konvertovaný do *.xls - VYŘEŠENÉ » 6. 1. 2022 18:35:40

lp.

vlookup v excelu neprovádí automatickou konverzi typu. Je tedy nutné hodnoty ošetřit na listu nebo provést konverzi přímo ve vzorci tak aby se shodoval type hodnoty v tabulce a hledané hodnoty.


O tom, který přístup lepší, by se mohla vést dlouhá debata. Automatické konverze nemám rád a navíc někdy je těžké je obejít - pracuji dost s 18ti číselnými identifikátory - automatická konverze výpočty zmrší a ve funkcích typu sumif, coutif o ní moc lidí ani neví.


Obecně smíšené typy ve vyhledávacím klíči nejsou dobrým nápadem (nikde). Těch problémů je docela dost. Společným typem pro číslo i text je text, tj. pokud není klíč vždy číselný, hodnotu v tabulce převádím na text a hledanou hodnotu nastavuji ve vzorci (u klíčů typu '000121' záleží na okolnostech, obvykle preferuji textový tvar). Potom hledání vypadá:

VLOOKUP("'" & a1; b1:xxx ...)

nebo např. maticově:


index(d1:d50; match("'" & a1; b1:b50; 0)

Nevýhodou ale je, že pokud je požadována přibližná shoda, je pořadí řádků obecně závislé na prostředí.


Opačný přístup, tj. text nechat textem a číslo v textu převádět na číslo vede ke složitějším vzorcům. Funkce value text vyzmizíkuje a pak nic dobrého nenajdete.


Lze, ale nedoporučuji, nastavit obě strany, maticově, 


index(d1:d50; match("'" & a1; "'" & b1:b50; 0)

Při větší tabulce je to pomalé, konvertuje se větší objem dat v každém výpočtu,  obtížně se dá uhlídat pořadí v tabulce a pak je nezbytné použití sekvenční hledání (přesná shoda) místo rychlého binárního...

#21 Re: Calc » V buňce se zobrazuje #VALUE! Vyřešeno » 17. 12. 2021 01:12:18

lp.

Nenapsal jste odkud kopírujete. V některých výpisech (výpisy ČS neznám) bývají čísla proložena neviditelnými unicode znaky, někdy s nulovou délkou. viz např. wikipedie. Zkuste je najít a pak mazat.

Najít - může pomoci např. funkce mid, vyberte jednotlivé znaky podle pořadí třeba do sousedních buněk. Pokud bude některá buňka zdánlivě prázdná, můžete zviditelnit kód znaku v "prázdné" buňce - funkce asc, ...

#22 Re: Calc » Tipy na zrychlení makro výpočtů » 25. 8. 2021 23:17:55

lp.

Add třídění:
Doba potřebná na odstranění řádků závisí na počtu odstraňovaných souvislých bloků. Velikost bloku má podstatně menší vliv. Setřídění je pro mne nejjednodušší cestou, jak tyto nesouvislé řádky spojit do jednoho bloku. Tj. pokud se odstraňuje jen jeden řádek, tak se doba zvýší o režii třídění, pokud máme mnoho nesouvisejících řádků, tak naopak ušetříme. Na trik jsem přišel, když jsem dostal sešit, kde se střídaly řádky s daty s prázdnými.
Pomocí třídění můžeme dosáhnout dalšího zrychlení, např. lze mazané řádky přesunout na konec tabulky a blok hledat od konce - po smazání se nepřepočítávají odkazy na data na začátku tabulky a po odstranění bloku už další blok hledat nemusí.

add. zákaz aktualizace a přepočtu.
Záleží na okolnostech.
Při úpravě bloku bez propojení s výpočty je efekt minimální a po povolení přepočtu se přepočte sešit.
U větších tabulek s více výpočty může být efekt výrazný.

Používám u větších maker automaticky.

#23 Re: Calc » Tipy na zrychlení makro výpočtů » 23. 8. 2021 22:36:17

lp.

Vetšinou skoro automaticky používám:

	Doc = ThisComponent
	Doc.lockControllers()     ' zakáže aktualizaci obrazovky
	Doc.addActionLock()       ' zakáže přepočet

        ... výpočet ...

        Doc.removeActionLock()    ' povolí přepočet
        Doc.unlockControllers()   ' povolí aktualizaci zobrazení

Občas použiji také

        Doc = ThisComponent
        Doc.enableAutomaticCalculation(False)

        .................

        Doc.enableAutomaticCalculation(True)

(zakážu a povolím automatický přepočet)

Zamykání jednotlivých listů nepoužívám. (To byl překlep.)

#24 Re: Calc » Tipy na zrychlení makro výpočtů » 23. 8. 2021 00:17:34

lp.

Pár poznámek:

Pokud má makro běžet rychle, tak je nezbytné:
1) Přepnout přepočet na manuální (i při skrývání řádků se rozbíhají některé výpočty, při mazaní se přepočty rozběhnou jistě (tedy pokud je na oblast navázán výpočet), i když ke změně dojde na jiném listu,
2) zakázat aktualizaci listu ("aktivovat jiný list" dělá něco podobného, ale není tak účinné a je to zbytečná komplikace)
3) Pracovat s co největšími bloky dat.
4) Omezit počet přístupů k objektům calcu
5) Preferovat jednoduché proměnné

V uvedených příkladu jsou všechny body opomíjeny.

Pokud je nutné smazat velký počet řádků, tak nejrychlejší je smazání v jednom bloku. Jeden blok se všemi řádky k smazání dostaneme jednoduše setříděním řádků podle sloupce s příznakem skrýt. (Je rozdíl mezi mazáním v jednom bloku a jedním příkazem. při mazání každého bloku dochází k přepočtu souvisejících adres a podle nastavení také k přepočtu vzorců.)




Jinak poslední ukázka obsahuje zbytečně moc proměnných pro hledání oblasti (Na těch pár řádcích není zřejmě dopad na výkon významný) :

dim iZac&, iPosun&, test as boolean, b as boolean

	rem hlavní smyčka

	b=false
	iPosun = i1 - lbound(data)

	for i=lbound(data) to ubound(data)

			rem ukazatel průběhu
			...  

		rem porovnávání hodnot a přidávání do oRanges

		test=data(i)(0) = aSkryt
		if test <> b then 'došlo ke změně v bloku
			b = test ' dál nám stačí jedna hodnota
			if test then ' začíná  blok pro skrytí (protože b bylo false)
				iZac = i ' uložíme začátek bloku
			else ' konec bloku pro skrytí (protože b bylo true, tak blok končí)
				with oRangeAddress 'řádky přidávaného rozsahu
					.StartRow=iZac + iPosun
					.EndRow=i+iPosun-1
				end with
				oRanges.AddRangeAddress(oRangeAddress,true) 'přidat rozsah
			end if
		end if
	next i
	if b then ' b je true, tj. poslední blok mažeme 
		... dokončit poslední blok

#25 Re: Calc » Odstranění dat na základě druhého sloupce » 27. 7. 2021 16:43:54

lp.

Na sloupce A a B zapnout automatický filtr, ve sloupci B vybrat neprázdné hodnoty, vymazat nebo zkopírovat A.

Z dotazu není zřejmé, jestli se mají odstranit hodnoty z A, které
+ mají v B nějakou hodnotu,
+ hodnota v B = A,
+ hodnota v A existuje někde ve sloupci B,
+ něco jiného.

Přečetl jsem si ještě druhý příspěvek. do C stačí

MATCH(A1;$B$1:$B$1000;0).

pokud by to hledalo dlouho, tak o hodně rychlejší je:
setřídit B,
do C: VLOOKUP(A1;$B$1:$B$1000;1) = A1

Zápatí

Používáme FluxBB