Jak zrychlit práci/výkon excelu
Re: Jak zrychlit práci/výkon excelu
Ve VB nedelam, ale 24 000x tam do promenne vkladas vzorec s mezerami a pak je odstranujes. To bych dal pred cykly, pak to budes delat jen 3x.
HP Elitebook 845 G8 (Ryzen 5650U, 32GB RAM, WD SN570 1TB, 14" fullHD IPS) + HP USB-C G5 Essential + 29" LG 29UM65 + 22" Eizo S2202W
Re: Jak zrychlit práci/výkon excelu
Krátká odpověď : Celé to předělej.
Pracuješ s větší oblastí po jednotlivých buňkách. V každém kroku vkládáš do buněk vzorce a excel to musí několikrát přepočítat. Ty vzorce se počítají dost dlouho. Volání vzorců z vba také není nejrychlejší.
Pracuješ s větší oblastí po jednotlivých buňkách. V každém kroku vkládáš do buněk vzorce a excel to musí několikrát přepočítat. Ty vzorce se počítají dost dlouho. Volání vzorců z vba také není nejrychlejší.
Re: Jak zrychlit práci/výkon excelu
xlnc - manuální přepočet již jsem doplnil do předloženého kódu, zkrátilo běh makra cca z 500 sekund na 150. Díky.
Zivan, Lubo - nevím jak udělat. Můžete být konkrétnější prosím?
Zivan, Lubo - nevím jak udělat. Můžete být konkrétnější prosím?
Re: Jak zrychlit práci/výkon excelu
To cervene presunout na zelene (pred FOR) a ve vsech trech cyklech.
...
'Slozeni vzorce
vzorec = "=(INDEX(mat_costs!$A$2:$J$111;POZVYHLEDAT(E" + Str(i) + ";mat_costs!$A$2:$A$111;0);POZVYHLEDAT(G" + Str(i) + ";mat_costs!$A$1:$J$1;1)+1))/specification!$L$1"
' 'Odstraneni mezer
vzorec = Replace(vzorec, " ", "")
For i = 9 To pocet_radku
' Debug.Print i
'Slozeni vzorce
vzorec = "=(INDEX(mat_costs!$A$2:$J$111;POZVYHLEDAT(E" + Str(i) + ";mat_costs!$A$2:$A$111;0);POZVYHLEDAT(G" + Str(i) + ";mat_costs!$A$1:$J$1;1)+1))/specification!$L$1"
'Odstraneni mezer
vzorec = Replace(vzorec, " ", "")
...
...
'Slozeni vzorce
vzorec = "=(INDEX(mat_costs!$A$2:$J$111;POZVYHLEDAT(E" + Str(i) + ";mat_costs!$A$2:$A$111;0);POZVYHLEDAT(G" + Str(i) + ";mat_costs!$A$1:$J$1;1)+1))/specification!$L$1"
' 'Odstraneni mezer
vzorec = Replace(vzorec, " ", "")
For i = 9 To pocet_radku
' Debug.Print i
'Slozeni vzorce
vzorec = "=(INDEX(mat_costs!$A$2:$J$111;POZVYHLEDAT(E" + Str(i) + ";mat_costs!$A$2:$A$111;0);POZVYHLEDAT(G" + Str(i) + ";mat_costs!$A$1:$J$1;1)+1))/specification!$L$1"
'Odstraneni mezer
vzorec = Replace(vzorec, " ", "")
...
HP Elitebook 845 G8 (Ryzen 5650U, 32GB RAM, WD SN570 1TB, 14" fullHD IPS) + HP USB-C G5 Essential + 29" LG 29UM65 + 22" Eizo S2202W
Re: Jak zrychlit práci/výkon excelu
Zhavaruje to na:
'Vlozeni hodnoty misto vzorce
Worksheets("specification").Cells(i, 9).Value = Round(Worksheets("specification").Cells(i, 9).Value, 2)
'Vlozeni hodnoty misto vzorce
Worksheets("specification").Cells(i, 9).Value = Round(Worksheets("specification").Cells(i, 9).Value, 2)
Re: Jak zrychlit práci/výkon excelu
Aha, prehledl jsem, ze do toho vzorce vkladas "Str(i)", takze to dat pred cyklus nepujde.
Proč je tam to odstraneni mezer? Na prvni pohled i prijde, ze tam zadne nemas.
Proč je tam to odstraneni mezer? Na prvni pohled i prijde, ze tam zadne nemas.
HP Elitebook 845 G8 (Ryzen 5650U, 32GB RAM, WD SN570 1TB, 14" fullHD IPS) + HP USB-C G5 Essential + 29" LG 29UM65 + 22" Eizo S2202W
Re: Jak zrychlit práci/výkon excelu
když vyřadím:
vzorec = Replace(vzorec, " ", "")
tak to zhavaruje na stejném místě jak uvedeno výše
vzorec = Replace(vzorec, " ", "")
tak to zhavaruje na stejném místě jak uvedeno výše
Re: Jak zrychlit práci/výkon excelu
Tohle je prkotina. Existuje notace R1C1. Stačí vzorce vytvořit jednou. Někde je to i použito.
Add. podrobněji:
Nemohu, kód je hodně nečitelný, velká část kódu je zakomentována něco se ale zřejmě zalomilo na nový řádek a luštit, co to má dělat se mi nechce.
Nicméně, odkazovat se na buňku celou cestou je hodně neefektivní.
'---------------------------------------
Worksheets("specification").Cells(i, 9).Value = Round(Worksheets("specification").Cells(i, 9).Value, 2)
'---------------------------------------
' nebo
with Worksheets("specification").Cells(i, 9)
.Value = Round(.Value, 2)
end with
'---------------------------------------
'nebo
dim w as worksheet
set w = Worksheets("specification")
...
with w.Cells(i, 9)
.Value = Round(.Value, 2)
end with
co třeba vyplnit vzorce v bloku najednou, hodnoty nahradit najednou, pracovat s daty v paměti, ...
Přepnutí na manuální přepočet je jistě základ, ale v makru vkládáš do buňky vzorec a hned z něho vracíš do buňky hodnotu ...? Možná to funguje, ale nepovažuji to za dobrý nápad.
Add. podrobněji:
Nemohu, kód je hodně nečitelný, velká část kódu je zakomentována něco se ale zřejmě zalomilo na nový řádek a luštit, co to má dělat se mi nechce.
Nicméně, odkazovat se na buňku celou cestou je hodně neefektivní.
'---------------------------------------
Worksheets("specification").Cells(i, 9).Value = Round(Worksheets("specification").Cells(i, 9).Value, 2)
'---------------------------------------
' nebo
with Worksheets("specification").Cells(i, 9)
.Value = Round(.Value, 2)
end with
'---------------------------------------
'nebo
dim w as worksheet
set w = Worksheets("specification")
...
with w.Cells(i, 9)
.Value = Round(.Value, 2)
end with
co třeba vyplnit vzorce v bloku najednou, hodnoty nahradit najednou, pracovat s daty v paměti, ...
Přepnutí na manuální přepočet je jistě základ, ale v makru vkládáš do buňky vzorec a hned z něho vracíš do buňky hodnotu ...? Možná to funguje, ale nepovažuji to za dobrý nápad.
Re: Jak zrychlit práci/výkon excelu
díky
použití with ... nemá měřitelný vliv na dobu
použití dim w as worksheet ... zkrátilo čas z cca 150s na cca 90s
to vložení vzorce a vrácení hodnoty jsem si kontroloval a zatím to funguje správně, ale asi to změním
použití with ... nemá měřitelný vliv na dobu
použití dim w as worksheet ... zkrátilo čas z cca 150s na cca 90s
to vložení vzorce a vrácení hodnoty jsem si kontroloval a zatím to funguje správně, ale asi to změním
Re: Jak zrychlit práci/výkon excelu
Pěkně zdravím¨
Po tom co jsem zrušit vložení vzorce a vrácení hodnoty (viz níže druhý řádek) se k mému překvapení čas prodloužil z 90s na cca 200s.
vzorec = "=(INDEX(mat_costs!$A$2:$J$111;POZVYHLEDAT(E" + Str(i) + ";mat_costs!$A$2:$A$111;0);POZVYHLEDAT(G" + Str(i) + ";mat_costs!$A$1:$J$1;1)+1))/specification!$L$1"
' vzorec = "=(INDEX(mat_costs!$r$2:$z$111;POZVYHLEDAT(E" + Str(i) + ";mat_costs!$r$2:$r$111;0);POZVYHLEDAT(G" + Str(i) + ";mat_costs!$r$1:$z$1;1)+1))"
To malé vytížení procesoru je způsobeno tím, že VBA pracuje jen s jedním jádrem?
Po tom co jsem zrušit vložení vzorce a vrácení hodnoty (viz níže druhý řádek) se k mému překvapení čas prodloužil z 90s na cca 200s.
vzorec = "=(INDEX(mat_costs!$A$2:$J$111;POZVYHLEDAT(E" + Str(i) + ";mat_costs!$A$2:$A$111;0);POZVYHLEDAT(G" + Str(i) + ";mat_costs!$A$1:$J$1;1)+1))/specification!$L$1"
' vzorec = "=(INDEX(mat_costs!$r$2:$z$111;POZVYHLEDAT(E" + Str(i) + ";mat_costs!$r$2:$r$111;0);POZVYHLEDAT(G" + Str(i) + ";mat_costs!$r$1:$z$1;1)+1))"
To malé vytížení procesoru je způsobeno tím, že VBA pracuje jen s jedním jádrem?
- elninoslov
- Level 2.5
- Příspěvky: 371
- Registrován: červen 13
- Pohlaví:
- Stav:
Offline
Re: Jak zrychlit práci/výkon excelu
Pošlite súbor, určite sa doberiete riešenia podstatne skôr, ako keď si máme vymýšľať data, ktoré by na to mohli sedieť. Citlivé údaje zmažte, ceny či názvy pozmeňte, o tie nám nejde. Len zachovajte rozmiestnenie, typ, a formáty dát.
Re: Jak zrychlit práci/výkon excelu
Čtení s porozuměním je těžká úloha.
Zkusím příklad.
Máme dvě makra.
Pusť si obě a porovnej dobu (i třeba čitelnost kódu).
Tj. nesmyslně napsanému kódu další jádra nepomohou.
Zkusím příklad.
Máme dvě makra.
MakroVOMje zjednodušená ukázka zaslaného makra, tj. upravuje blok po jednotlivých buňkách.
MakroSTDdělá totéž standardním postupem, tj. upraví blok najednou.
Pusť si obě a porovnej dobu (i třeba čitelnost kódu).
Sub MakroVOM()
Dim i As Long
Dim vzorec As String
For i = 1 To 100000
vzorec = "=A" & Str(i) & "+B" & Str(i)
vzorec = Replace(vzorec, " ", "")
Worksheets("List1").Cells(i, 9).FormulaLocal = vzorec
Next
End Sub
Sub MakroSTD()
Range("C1:C10000").FormulaLocal = "=A1+B1"
End Sub
Tj. nesmyslně napsanému kódu další jádra nepomohou.
-
- Mohlo by vás zajímat
- Odpovědi
- Zobrazení
- Poslední příspěvek
-
- 1
- 844
-
od zero
Zobrazit poslední příspěvek
19 črc 2023 13:43
-
- 1
- 1549
-
od newwes
Zobrazit poslední příspěvek
16 zář 2023 16:03
-
- 14
- 1432
-
od nl635
Zobrazit poslední příspěvek
24 lis 2023 20:43
-
- 18
- 3570
-
od luko02420
Zobrazit poslední příspěvek
16 kvě 2023 11:27
-
-
Výběr noteboku na kancelářskou práci do 15.000,-
od deus.one » 23 říj 2023 20:45 » v Rady s výběrem hw a sestavením PC - 3
- 802
-
od deus.one
Zobrazit poslední příspěvek
04 lis 2023 08:24
-
Kdo je online
Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 3 hosti