Telefonszámunk: 1-472-0679

Az Excel kalkulációs idejének mérése

2013-02-01 - horvimi - Kategória: Képletek, Macro-VBA
Hivatkozott Excel verzio: Excel 2007 Excel 2010 Excel 2013

A nagy méretű, sok képletet tartalmazó munkafüzetekkel bizony meggyűlhet  a bajunk. A képletek állandó újraszámolása sok időbe telhet, és ez gátolhatja a munkavégzést.

Ilyenkor ki szoktuk kapcsolni az automatikus újraszámolást, és áttérünk manuális újraszámolásra, amihez a következő billentyűkombinációkat használhatjuk:

  • F9 – minden nyitvalévő munkafüzetben újraszámolja azokat a képleteket, amelyeknek az elődcellái változtak , tehát csak az általa szükségesnek vélt képleteket számolja újra.
    (VBA: Application.Calculate)
  •  Shift+F9 – Az előzőt teszi, de csak az aktuális munkalappal.
    (VBA: ActiveSheet.Calculate)
  •  Ctrl+Alt+F9 – Minden nyitott munkafüzetben minden képletet újraszámol.
    (VBA: Application.CalculateFull)
  • Ctrl+Shift+Alt+F9 – Minden nyitott munkafüzetben minden képletet újraszámol, és ellenőrzi, illetve újraépíti a függőségeket.
    (VBA: Application.CalculateFullRebuild)

Ha számít a sebesség, és egy problémára többféle megoldási ötletünk is van, akkor érdemes lehet a gyorsabbat választani. A sebesség vagy egyértelműen látszik, vagy mérni kell. Például kevesebb mennyiségű teszt adaton végzett mérés rámutathat a majdani sok adattal történő viselkedésre.

Az Excel kalkuláció mérése

Van egy nagyon érdekes cikk az Excel 2007-es verzióhoz, ahol a működési sebességet befolyásoló tényezőket taglalják.
Itt a link: http://msdn.microsoft.com/en-us/library/aa730921.aspx

Megadnak ott egy VBA kódot, amivel a fenti újrakalkulációs időket lehet számolni. Elég, ha a kódot tartalmazó munkafüzetet megnyitjuk, és máris használhatjuk a mérést. A kódokat tartalmazó munkafüzet letölthető az excel-bazis.hu-ról is.

Munkafüzet a meres kódjaival

A MICROTIMER() függvény Windows API hívásokkal éri el az operációs rendszer óráját, így akár mikroszekundumokat is képes mérni. A mérés úgy működik, hogy kikapcsolja az automatikus újrakalkulációt, majd a választott kalkulációs móddal újraszámol, közben pedig megméri az eltelt időt. A mérés végén az eredményt másodpercben egy üzenetben megjeleníti, majd beírja azt az aktuális cellába.

Fontos: Mivel a Windows nem Real Time rendszer, a mérések pontosságának fokozása érdekében érdemes 3-4 alkalommal megismételni, és  a kapott eredményeket átlagolni.

A videóból pedig kiderül, hogyan kell használni.

  • Kalkulációs modell mérése

4 hozzászólás
  1. Sziasztok!
    Tudna valaki segíteni, mit kell megváltoztatni ebben, hogy Exel2016 64-bites verzió alatt is működjön?
    Előre is köszönöm a segítséget.
    Miklós

    Private Declare Function getFrequency Lib „kernel32” _
    Alias „QueryPerformanceFrequency” (cyFrequency As Currency) As Long
    Private Declare Function getTickCount Lib „kernel32” _
    Alias „QueryPerformanceCounter” (cyTickCount As Currency) As Long

  2. Szia!

    Igen, tudom, hogy ez 64 biten sajnos nem működik.
    Még nem nagyon volt érkezésem nyomozni, de most találtam egy ilyet, amit esetleg megpróbálhatsz.
    A Long helyett a LongLong.
    Furcsa lenne, ha „csak” ez megoldaná a dolgot, de egy próbát megér.
    Chip Pearson-nál találtam
    http://www.cpearson.com/excel/Bitness.aspx

    Imre

  3. Szia!
    köszönöm, működik az alábbival:

    Private Declare PtrSafe Function getFrequency Lib „kernel32” _
    Alias „QueryPerformanceFrequency” (cyFrequency As Currency) As LongLong
    Private Declare PtrSafe Function getTickCount Lib „kernel32” _
    Alias „QueryPerformanceCounter” (cyTickCount As Currency) As Long

Vélemény, hozzászólás?