Jak zrychlit práci/výkon excelu

Programy pro práci v kanceláři (Word, Excel, Access…=>Office)

Moderátor: Mods_senior

Zivan
Level 5
Level 5
Příspěvky: 2450
Registrován: leden 10
Pohlaví: Nespecifikováno
Stav:
Offline

Re: Jak zrychlit práci/výkon excelu

Příspěvekod Zivan » 08 srp 2019 16:14

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

Reklama
lubo.
Level 2
Level 2
Příspěvky: 192
Registrován: červen 13
Pohlaví: Nespecifikováno
Stav:
Offline

Re: Jak zrychlit práci/výkon excelu

Příspěvekod lubo. » 08 srp 2019 17:45

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ší.

VOM
Level 1.5
Level 1.5
Příspěvky: 114
Registrován: srpen 10
Pohlaví: Muž
Stav:
Offline

Re: Jak zrychlit práci/výkon excelu

Příspěvekod VOM » 09 srp 2019 08:04

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
Level 5
Level 5
Příspěvky: 2450
Registrován: leden 10
Pohlaví: Nespecifikováno
Stav:
Offline

Re: Jak zrychlit práci/výkon excelu

Příspěvekod Zivan » 09 srp 2019 08:38

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, " ", "")

...
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

VOM
Level 1.5
Level 1.5
Příspěvky: 114
Registrován: srpen 10
Pohlaví: Muž
Stav:
Offline

Re: Jak zrychlit práci/výkon excelu

Příspěvekod VOM » 09 srp 2019 08:51

Zhavaruje to na:

'Vlozeni hodnoty misto vzorce
Worksheets("specification").Cells(i, 9).Value = Round(Worksheets("specification").Cells(i, 9).Value, 2)

Zivan
Level 5
Level 5
Příspěvky: 2450
Registrován: leden 10
Pohlaví: Nespecifikováno
Stav:
Offline

Re: Jak zrychlit práci/výkon excelu

Příspěvekod Zivan » 09 srp 2019 09:19

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.
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

VOM
Level 1.5
Level 1.5
Příspěvky: 114
Registrován: srpen 10
Pohlaví: Muž
Stav:
Offline

Re: Jak zrychlit práci/výkon excelu

Příspěvekod VOM » 09 srp 2019 09:28

když vyřadím:
vzorec = Replace(vzorec, " ", "")
tak to zhavaruje na stejném místě jak uvedeno výše

lubo.
Level 2
Level 2
Příspěvky: 192
Registrován: červen 13
Pohlaví: Nespecifikováno
Stav:
Offline

Re: Jak zrychlit práci/výkon excelu

Příspěvekod lubo. » 09 srp 2019 09:45

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.

VOM
Level 1.5
Level 1.5
Příspěvky: 114
Registrován: srpen 10
Pohlaví: Muž
Stav:
Offline

Re: Jak zrychlit práci/výkon excelu

Příspěvekod VOM » 09 srp 2019 12:17

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

VOM
Level 1.5
Level 1.5
Příspěvky: 114
Registrován: srpen 10
Pohlaví: Muž
Stav:
Offline

Re: Jak zrychlit práci/výkon excelu

Příspěvekod VOM » 13 srp 2019 09:47

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?

Uživatelský avatar
elninoslov
Level 2.5
Level 2.5
Příspěvky: 371
Registrován: červen 13
Pohlaví: Muž
Stav:
Offline

Re: Jak zrychlit práci/výkon excelu

Příspěvekod elninoslov » 13 srp 2019 11:10

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.

lubo.
Level 2
Level 2
Příspěvky: 192
Registrován: červen 13
Pohlaví: Nespecifikováno
Stav:
Offline

Re: Jak zrychlit práci/výkon excelu

Příspěvekod lubo. » 13 srp 2019 11:20

Čtení s porozuměním je těžká úloha.

Zkusím příklad.

Máme dvě makra.
MakroVOM
je zjednodušená ukázka zaslaného makra, tj. upravuje blok po jednotlivých buňkách.
MakroSTD
dě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
  • Notebook na práci do 20k
    od zero » 18 črc 2023 22:08 » v Rady s výběrem hw a sestavením PC
    1
    844
    od zero Zobrazit poslední příspěvek
    19 črc 2023 13:43
  • Sestava na práci do 18K
    od devak » 16 zář 2023 12:59 » v Rady s výběrem hw a sestavením PC
    1
    1549
    od newwes Zobrazit poslední příspěvek
    16 zář 2023 16:03
  • Výběr myši na práci
    od Edom » 23 lis 2023 23:00 » v Rady s výběrem hw a sestavením PC
    14
    1432
    od nl635 Zobrazit poslední příspěvek
    24 lis 2023 20:43
  • Import PDF do excelu Příloha(y)
    od luko02420 » 13 kvě 2023 11:29 » v Kancelářské balíky
    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

Zpět na “Kancelářské balíky”

Kdo je online

Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 3 hosti