Články > Bleskové kopírovanie veľkého objemu dát

Kopírujte virtuálne

Sila tejto metódy spočíva v tom, že pre hlavnú operáciu kopírovania, alebo výpočtov sa využíva dynamické pole Array(). Dáta sa najprv skopírujú do tohto dynamického poľa, ktoré pracuje priamo v pamäti. Tým sa ďalšie operácie vykonávajú oveľa rýchlejšie ako pri fyzickom kopírovaní. Dobrý popis je na stránke Daily dose of Excel.

Zošit s príkladom obsahuje list s dátami, ktoré chceme skopírovať do ďalšieho listu. Máme dve makrá, ktoré používajú bežný cyklus For. Pomalé makro zapisuje hodnoty do listu postupne v cykle. Rýchle makro vykonáva tento cyklus v dynamickom poli Array(), pričom sa list vyplní až nakoniec všetkými dátami naraz. Rozdiel v rychlosti kopírovania 50000 riadkov a 10 stĺpcov na mojom počítači vidíte na obrázku.

info okno VBA okno so správou

Samozrejme, v pomalom makre boli povypínané spomaľujúce funkcie ako ScreenUpdating a Calculation. V rýchlom makre tieto funkcie nemajú merateľný vplyv, preto nie sú použité.

DYNAMICKÉ POLE ARRAY()

Za všetkým teda stojí trik v použití dynamického poľa tempPole(), ktoré dočasne uchová naše dáta v pamäti. Zároveň definujeme oblasť oblast v liste shPrehlad, kam skopírované dáta nakoniec vložíme.

kod pre definovanie dynamickeho pola VBA

Podrobný popis ako využívať dynamické pole je v nápovede VBA. Kvalitný popis použitia polí nájdete aj na stránke Radka Jurečka, alebo na stránke Pavla Lasáka.

CYKLUS FOR...NEXT

Operáciu kopírovania dát medzi listami vykonáme taktiež v cykle For. Ale dáta najskôr dočasne uložíme do poľa tempPole. A až nakoniec sa celý obsah dynamického poľa vloží do daného listu.

cyklus For() v kóde VBA

Výsledná tabuľka so skopírovanými dátami vyzerá ako na obrázku nižšie. Celý kód makra pre rýchle kopírovanie veľkého objemu dát v Exceli je voľne k dispozícii v priloženom zdrojovom zošite Excelu.

tabuľka s dátami