10 tapaa nopeuttaa makrojasi

Kun Excel-makroistasi tulee yhä vankempia ja monimutkaisempia, saatat huomata, että niiden suorituskyky heikkenee. Kun puhutaan makroista, sana suorituskyky on yleensä synonyymi nopeudelle . Nopeus tarkoittaa, kuinka nopeasti VBA-menettelysi suorittavat niille aiotut tehtävät. Seuraavassa on kymmenen tapaa auttaa pitämään Excel-makrosi käynnissä optimaalisella suorituskyvyllä.

Arkkilaskelmien pysäyttäminen

Tiesitkö, että Excel laskee koko laskentataulukon uudelleen aina, kun solua, joka vaikuttaa mihin tahansa laskentataulukon kaavaan, muutetaan tai käsitellään? Työtaulukoissa, joissa on suuri määrä kaavoja, tämä toiminta voi hidastaa makroja huomattavasti.

Application.Calculation-ominaisuuden avulla voit käskeä Exceliä siirtymään manuaaliseen laskentatilaan. Kun työkirja on manuaalisessa laskentatilassa, työkirja ei laske uudelleen ennen kuin käynnistät laskutoimituksen painamalla F9-näppäintä.

Aseta Excel manuaaliseen laskentatilaan, suorita koodisi ja vaihda sitten takaisin automaattiseen laskentatilaan.

Alamakro1()
Application.Calculation = xlCalculationManual
 'Aseta makrokoodisi tähän
Application.Calculation = xlCalculationAutomatic
Lopeta ala

Laskentatilan palauttaminen xlCalculationAutomatic käynnistää automaattisesti laskentataulukon uudelleenlaskennan, joten sinun ei tarvitse painaa F9-näppäintä makron suorittamisen jälkeen.

Poistetaan taulukon näytön päivitys käytöstä

Saatat huomata, että kun makrosi suoritetaan, näyttösi vilkkuu melkoisesti. Tämä välkkyminen tarkoittaa, että Excel yrittää piirtää näytön uudelleen näyttämään laskentataulukon nykyisen tilan. Valitettavasti joka kerta, kun Excel piirtää näytön uudelleen, se vie muistiresursseja.

Application.ScreenUpdating-ominaisuuden avulla voit poistaa näytön päivitykset käytöstä, kunnes makrosi on valmis. Näytön päivityksen poistaminen käytöstä säästää aikaa ja resursseja, jolloin makrosi toimii hieman nopeammin. Kun makrokoodisi on suoritettu, voit ottaa näytön päivityksen takaisin käyttöön.

Alamakro1()
Application.Calculation = xlCalculationManual
Application.ScreenUpdating = False
 'Aseta makrokoodisi tähän
Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = Totta
Lopeta ala

Kun olet asettanut ScreenUpdating-ominaisuuden takaisin arvoon True, Excel käynnistää automaattisesti näytön uudelleenpiirtämisen.

Tilapalkin päivitysten poistaminen käytöstä

Excelin tilapalkki, joka näkyy Excel-ikkunan alaosassa, näyttää yleensä tiettyjen toimintojen edistymisen Excelissä. Jos makrosi toimii paljon datan kanssa, tilapalkki vie resursseja.

On tärkeää huomata, että näytön päivityksen sammuttaminen on eri asia kuin tilapalkin näytön sammuttaminen. Tilarivin päivitys jatkuu, vaikka poistaisit näytön päivityksen käytöstä. Application.DisplayStatusBar-ominaisuuden avulla voit tilapäisesti poistaa tilapalkin päivitykset käytöstä ja parantaa näin makrosi suorituskykyä:

Alamakro1()
Application.Calculation = xlCalculationManual
Application.ScreenUpdating = False
Application.DisplayStatusBar = False
 'Aseta makrokoodisi tähän
Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = Totta
Application.DisplayStatusBar = Tosi
Lopeta ala

Excelin käskeminen ohittaa tapahtumat

Voit ottaa makroja käyttöön tapahtumaproseduureina ja käskeä Exceliä suorittamaan tietyn koodin, kun laskentataulukko tai työkirja muuttuu.

Joskus vakiomakrot tekevät muutoksia, jotka käynnistävät tapahtumamenettelyn. Jos sinulla on esimerkiksi vakiomakro, joka käsittelee useita Sheet1:n soluja, makrosi on keskeytettävä joka kerta, kun taulukon solua muutetaan, kun Worksheet_Change -tapahtuma suoritetaan.

Voit lisätä toisen tason suorituskyvyn tehostamiseen käyttämällä EnableEvents-ominaisuutta ja käskeä Exceliä ohittamaan tapahtumat makron suorittamisen aikana.

Aseta EnableEvents-ominaisuuden arvoksi False ennen makron suorittamista. Kun makrokoodisi on suoritettu, voit asettaa EnableEvents-ominaisuuden takaisin arvoon True.

Alamakro1()
Application.Calculation = xlCalculationManual
Application.ScreenUpdating = False
Application.DisplayStatusBar = False
Application.EnableEvents = False
 'Aseta makrokoodisi tähän
Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = Totta
Application.DisplayStatusBar = Tosi
Application.EnableEvents = Tosi
Lopeta ala

Sivunvaihtojen piilottaminen

Aina kun makrosi muuttaa rivien määrää, sarakkeiden määrää tai muuttaa laskentataulukon sivuasetuksia, Excelin on pakko ottaa aikaa laskeakseen uudelleen taulukossa näkyvät sivunvaihdot.

Voit välttää tämän toiminnan yksinkertaisesti piilottamalla sivunvaihdot ennen makron käynnistämistä.

Aseta DisplayPageBreaks-taulukkoominaisuuden arvoksi False piilottaaksesi sivunvaihdot. Jos haluat jatkaa sivunvaihtojen näyttämistä makron suorittamisen jälkeen, aseta DisplayPageBreaks-taulukkoominaisuuden arvoksi takaisin True.

Alamakro1()
Application.Calculation = xlCalculationManual
Application.ScreenUpdating = False
Application.DisplayStatusBar = False
Application.EnableEvents = False
Activesheet.DisplayPageBreaks = Väärin
 'Aseta makrokoodisi tähän
Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = Totta
Application.DisplayStatusBar = Tosi
Application.EnableEvents = Tosi
Activesheet.DisplayPageBreaks = Tosi
Lopeta ala

Keskeytetään pivot-taulukon päivityksiä

Jos makrosi käsittelee pivot-taulukoita, jotka sisältävät suuria tietolähteitä, saatat kokea huonoja tuloksia, kun teet esimerkiksi pivot-kenttien lisäämistä tai siirtämistä dynaamisesti.

Voit parantaa makrosi suorituskykyä keskeyttämällä pivot-taulukon uudelleenlaskennan, kunnes kaikki pivot-kenttien muutokset on tehty. Aseta vain PivotTable.ManualUpdate-ominaisuuden arvoksi True, jos haluat lykätä uudelleenlaskentaa, suorita makrokoodisi ja aseta sitten PivotTable.ManualUpdate-ominaisuuden arvoksi False uudelleenlaskennan käynnistämiseksi.

Alamakro1()
ActiveSheet.PivotTables("PivotTable1").ManualUpdate=True
 'Aseta makrokoodisi tähän
ActiveSheet.PivotTables("PivotTable1").ManualUpdate=False
Lopeta ala

Vältä kopioimista ja liittämistä

On tärkeää muistaa, että vaikka Macro Recorder säästää aikaa kirjoittamalla VBA-koodin puolestasi, se ei aina kirjoita tehokkainta koodia. Hyvä esimerkki on, kuinka Macro Recorder tallentaa kaikki kopiointi ja liitä -toiminnot, joita suoritat tallennuksen aikana.

Voit antaa makrojasi hieman tehostamalla leikkaamalla välimiehen ja suorittamalla suoran kopion yhdestä solusta kohdesoluun. Tämä vaihtoehtoinen koodi käyttää Destination-argumenttia ohittamaan leikepöydän ja kopioimaan solun A1 sisällön suoraan soluun B1.

Alue("A1").Kopioi kohde:=Alue("B1")

Jos haluat kopioida vain arvoja (ei muotoilua tai kaavoja), voit parantaa suorituskykyä entisestään välttämällä kopiointimenetelmää. Aseta vain kohdesolun arvo samaan arvoon, joka löytyy lähdesolusta. Tämä menetelmä on noin 25 kertaa nopeampi kuin kopiointimenetelmä:

Alue("B1").Arvo = Alue("A1").Arvo

Jos sinun on kopioitava vain kaavoja yhdestä solusta toiseen (ei arvoja tai muotoilua), voit asettaa kohdesolun kaavan samaan kaavaan, joka sisältyy lähdesoluun:

Alue("B1").Kaava = Alue("A1").Kaava

With-lausekkeen käyttäminen

Kun tallennat makroja, käsittelet usein samaa objektia useammin kuin kerran. Voit säästää aikaa ja parantaa suorituskykyä käyttämällä With-lausetta suorittaaksesi useita toimintoja tietylle objektille yhdellä otoksella.

Seuraavassa esimerkissä käytetty With-lause kehottaa Exceliä käyttämään kaikkia muotoilumuutoksia kerralla:

    Kanssa Range("A1").Font
    .Lihavoitu = Totta
    .Italic = Totta
    .Underline = xlUnderlineStyleSingle
    Lopeta kanssa

Kun totut toimintojen jakamiseen With-lausekkeisiin, makrot toimivat nopeammin, mutta myös makrokoodisi lukeminen on helpompaa.

Vältä Select-menetelmää

Macro Recorder haluaa käyttää Select-menetelmää objektien nimenomaiseen valitsemiseen ennen niiden suorittamista. Objekteja ei yleensä tarvitse valita ennen niiden käsittelyä. Itse asiassa voit parantaa makron suorituskykyä dramaattisesti, jos et käytä Select-menetelmää.

Kun olet tallentanut makrosi, ota tapaksesi muuttaa luotua koodia Select-menetelmien poistamiseksi. Tässä tapauksessa optimoitu koodi näyttäisi tältä:

    Sheets("Sheet1").Alue("A1").KaavaR1C1 = "1000"
    Sheets("Sheet2").Alue("A1").KaavaR1C1 = "1000"
    Sheets("Sheet3").Alue("A1").KaavaR1C1 = "1000"

Huomaa, että mitään valitaan. Koodi käyttää vain objektihierarkiaa tarvittavien toimien toteuttamiseen.

Matkojen rajoittaminen laskentataulukkoon

Toinen tapa nopeuttaa makroja on rajoittaa sitä, kuinka monta kertaa viittaat laskentataulukon tietoihin koodissasi. Tietojen hakeminen laskentataulukosta on aina tehottomampaa kuin muistista. Toisin sanoen makrosi toimivat paljon nopeammin, jos niiden ei tarvitse toistuvasti olla vuorovaikutuksessa laskentataulukon kanssa.

Esimerkiksi seuraava yksinkertainen koodi pakottaa VBA:n palaamaan jatkuvasti Sheets("Sheet1").Alue("A1") saadakseen If-käskyssä suoritettavaan vertailuun tarvittavan luvun:

Raporttikuukaudelle = 1–12
     If Range("A1").Arvo = RaporttiKuukausi Sitten
     Viestilaatikko 1000000 / Raporttikuukausi
Loppu Jos
Seuraava raporttikuukausi

Paljon tehokkaampi tapa on tallentaa arvo Sheets("Sheet1").Alue("A1") muuttujaan nimeltä MyMonth. Tällä tavalla koodi viittaa MyMonth-muuttujaan laskentataulukon sijaan:

Dim MyMonth kokonaislukuna
Omakuukausi = Väli("A1").Arvo
Raporttikuukaudelle = 1–12
Jos Omakuukausi = RaporttiKuukausi Sitten
Viestilaatikko 1000000 / Raporttikuukausi
Loppu Jos
Seuraava raporttikuukausi

Harkitse muuttujien hyödyntämistä muistissa olevien tietojen kanssa sen sijaan, että viittaisit suoraan laskentataulukoihin.

Vältä liiallista viittausta

Kun objektin menetelmää tai ominaisuutta kutsutaan, sen on käytävä läpi OLE-komponentin IDispatch-liittymä. Kutsut näihin OLE-komponentteihin vievät aikaa, joten OLE-komponenttien viittausten määrän vähentäminen voi parantaa makrokoodin nopeutta.

Objektin ominaisuuksien tai menetelmien kutsumiseen  käytetään yleensä Object.Methodin esitystapaa  , eli "." symbolia käytetään ominaisuuksien ja menetelmien kutsumiseen.

Siksi menetelmä- tai ominaisuuskutsujen lukumäärä voidaan arvioida symbolien "." lukumäärän mukaan. Mitä vähemmän "." symboli, sitä nopeammin koodi suoritetaan.

Esimerkiksi seuraava lause sisältää 3 symbolia ".".

ThisWorkbook.Sheet1.Range("A1").Value = 100

Seuraavassa lauseessa on vain yksi symboli ".".

Activewindow.Top = 100

Tässä on joitain temppuja symbolien "" määrän vähentämiseksi. juoksemaan nopeammin.

Ensinnäkin, kun sinun on viitattava samaan objektiin toistuvasti, voit asettaa objektin muuttujaksi puheluiden määrän vähentämiseksi. Esimerkiksi seuraava koodi vaatii kaksi puhelua linjaa kohden.

ThisWorkbook.Sheets("Sheet1").Cells(1, 1) = 100
ThisWorkbook.Sheets("Sheet1").Cells(2, 1) = 200
ThisWorkbook.Sheets("Sheet1").Cells(3, 1) = 300

Koska  Sheets("Sheet1")-  objektiin on viitattava toistuvasti, se voidaan asettaa ensin muuttujaksi  sht  , jolloin kutakin koodia tarvitsee kutsua vain kerran.

Set sht = ThisWorkbook.Sheets("Sheet1")
sht.Cells(1, 1) = 100
sht.Cells(2, 1) = 200
sht.Cells(3, 1) = 300

Toiseksi, jos et halua ilmoittaa väliaikaista muuttujaa sht, voit käyttää myös   aiemmin mainittua With -lausetta. Kuten seuraavassa esimerkissä näkyy:

With ThisWorkbook.Sheets("Sheet1")
    .Cells(1, 1) = 100
    .Cells(2, 1) = 200
    .Cells(3, 1) = 300
End With

Kolmanneksi,  kun silmukoita on paljon, yritä pitää ominaisuudet ja menetelmät silmukan ulkopuolella.  Kun käytät uudelleen saman objektin ominaisuusarvoa silmukassa, voit ensin määrittää ominaisuuden arvon määritetylle muuttujalle silmukan ulkopuolella ja sitten käyttää silmukassa olevaa muuttujaa, mikä voi saavuttaa nopeamman nopeuden. Kuten seuraavassa esimerkissä näkyy:

For i = 1 To 1000
    ThisWorkbook.Sheets("Sheet1").Cells(1, 1) = Cells(1, 2).Value
    ThisWorkbook.Sheets("Sheet1").Cells(2, 1) = Cells(1, 2).Value
    ThisWorkbook.Sheets("Sheet1").Cells(3, 1) = Cells(1, 2).Value
Next i

Jokainen silmukka tässä esimerkissä saa solun Solut(1,2) Arvo-ominaisuuden. Jos määrität Cells(1.2):n Arvo-ominaisuuden muuttujalle ennen silmukan alkamista, saat nopeamman ajon. Kuten seuraavassa esimerkissä näkyy:

tmp = Cells(1, 2).Value
For i = 1 To 1000
    ThisWorkbook.Sheets("Sheet1").Cells(1, 1) = tmp
    ThisWorkbook.Sheets("Sheet1").Cells(2, 1) = tmp
    ThisWorkbook.Sheets("Sheet1").Cells(3, 1) = tmp
Next i

Yllä oleva koodi kutsuu  ThisWorkbook.Sheets("Sheet1")  aina silmukan yhteydessä. Voit tehdä tämän nopeammin käyttämällä  With  -käskyä siirtääksesi kutsun  ThisWorkbook.Sheets("Sheet1")  silmukan ulkopuolelle. Kuten seuraavassa esimerkissä näkyy:

tmp = Cells(1, 2).Value
With ThisWorkbook.Sheets("Sheet1")
    For i = 1 To 1000
        .Cells(1, 1) = tmp
        .Cells(2, 1) = tmp
        .Cells(3, 1) = tmp
    Next i
End With

Vältä muunnelmatyyppien käyttöä

Aloittelijat käyttävät yleensä mieluummin Variant-tyyppisiä muuttujia, joiden etuna on se, että ne ovat vähemmän monimutkaisia, koska minkä tahansa tyyppistä dataa voidaan käyttää ilman muistin ylivuoto-ongelmaa, jos tiedot ovat liian suuria Integer- tai Long-tietotyypeille. Varienmt-tyyppiset tiedot vaativat kuitenkin enemmän ylimääräistä muistitilaa kuin muut määritetyt tyypit (2 tavua kokonaislukutiedoille, 4 tavua pitkille tiedoille ja 16 tavua Variant-tiedoille), VBA vaatii enemmän aikaa Variant-tyyppisten tietojen käsittelyyn kuin muut määritetyt tyypit. tiedoista. Kuten seuraava esimerkki osoittaa.

Sub VariantTest()
    Dim i As Long
    Dim ix As Integer, iy As Integer, iz As Integer
    Dim vx As Variant, vy As Variant, vz As Variant
    Dim tm As Date
    vx = 100: vy = 50
    tm = Timer
    For i = 1 To 1000000
        vz = vx * vy
        vz = vx + vy
        vz = vx - vy
        vz = vx / vy
    Next i
    Debug.Print "Variant types take " & Format((Timer - tm), "0.00000") & " seconds"
    ix = 100: iy = 50
    tm = Timer
    For i = 1 To 1000000
        iz = ix * iy
        iz = ix + iy
        iz = ix - iy
        iz = ix / iy
    Next i
    Debug.Print "Integer types take " & Format((Timer - tm), "0.00000") & " seconds"
End Sub

Yllä olevassa koodissa rivit 8-13 tekevät 1 miljoonan muunnelmamuuttujien yhteen-, vähennys-, kerto- ja jakooperaatiota ja rivit 17-22 tekevät 1 miljoonan kokonaislukumuuttujien yhteen-, vähennys-, kerto- ja jakooperaation. Tietokoneellani Variant-muuttujan toiminta kesti noin  0,09375  sekuntia, kun taas Kokonaisluku-muuttujan toiminta noin  0,03125  sekuntia. Tulokset voivat vaihdella tietokoneittain, mutta  Variant-muuttujat ovat huomattavasti hitaampia kuin kokonaislukumuuttujat .

Tästä syystä  on suositeltavaa välttää Variant-muuttujien käyttöä, kun voit käyttää nimenomaisesti määritettyä tietotyyppiä .


Kuinka estää Microsoft Wordia avaamasta tiedostoja vain luku -tilassa Windowsissa

Kuinka estää Microsoft Wordia avaamasta tiedostoja vain luku -tilassa Windowsissa

Kuinka estää Microsoft Wordia avaamasta tiedostoja vain luku -tilassa Windowsissa Microsoft Word avaa tiedostot vain luku -tilassa, jolloin niiden muokkaaminen on mahdotonta? Älä huoli, menetelmät ovat alla

Microsoft Word -asiakirjojen virheellisen tulostuksen korjaaminen

Microsoft Word -asiakirjojen virheellisen tulostuksen korjaaminen

Virheiden korjaaminen virheellisten Microsoft Word -asiakirjojen tulostuksessa. Virheet tulostettaessa Word-asiakirjoja, joissa on muuttuneet fontit, sotkuiset kappaleet, puuttuva teksti tai kadonnut sisältö ovat melko yleisiä. Älä kuitenkaan

Pyyhi kynä- ja korostuspiirrokset PowerPoint-dioistasi

Pyyhi kynä- ja korostuspiirrokset PowerPoint-dioistasi

Jos olet piirtänyt PowerPoint-dioihin esityksen aikana kynää tai korostuskynää, voit tallentaa piirustukset seuraavaa esitystä varten tai poistaa ne, jotta seuraavan kerran näytät ne. Aloitat puhtailla PowerPoint-dioilla. Pyyhi kynä- ja korostuskynäpiirrokset noudattamalla näitä ohjeita: Pyyhi rivit yksi kerrallaan […]

Tyylikirjaston sisältö SharePoint 2010:ssä

Tyylikirjaston sisältö SharePoint 2010:ssä

Tyylikirjasto sisältää CSS-tiedostoja, Extensible Stylesheet Language (XSL) -tiedostoja ja kuvia, joita käyttävät ennalta määritetyt sivupohjat, sivuasettelut ja säätimet SharePoint 2010:ssä. CSS-tiedostojen etsiminen julkaisusivuston tyylikirjastosta: Valitse Sivuston toiminnot→ Näytä Kaikki sivuston sisältö. Sivuston sisältö tulee näkyviin. Style-kirjasto sijaitsee […]

Muotoile numerot tuhansiksi ja miljooniksi Excel-raporteissa

Muotoile numerot tuhansiksi ja miljooniksi Excel-raporteissa

Älä hukuta yleisöäsi jättimäisillä numeroilla. Microsoft Excelissä voit parantaa koontinäyttöjesi ja raporttiesi luettavuutta muotoilemalla numerot näyttämään tuhansia tai miljoonia.

SharePoint-sivustojen jakaminen ja seuraaminen

SharePoint-sivustojen jakaminen ja seuraaminen

Opi käyttämään SharePointin sosiaalisen verkostoitumisen työkaluja, joiden avulla yksilöt ja ryhmät voivat kommunikoida, tehdä yhteistyötä, jakaa ja pitää yhteyttä.

Kuinka muuntaa päivämäärät Julian-muotoihin Excelissä

Kuinka muuntaa päivämäärät Julian-muotoihin Excelissä

Juliaanisia päivämääriä käytetään usein valmistusympäristöissä aikaleimana ja pikaviitteenä eränumerolle. Tämän tyyppisen päivämääräkoodauksen avulla jälleenmyyjät, kuluttajat ja huoltoedustajat voivat tunnistaa tuotteen valmistusajankohdan ja siten tuotteen iän. Julian-päivämääriä käytetään myös ohjelmoinnissa, armeijassa ja tähtitiedessä. Erilainen […]

Access-verkkosovelluksen luominen

Access-verkkosovelluksen luominen

Voit luoda verkkosovelluksen Access 2016:ssa. Mikä verkkosovellus sitten on? No, verkko tarkoittaa, että se on verkossa, ja sovellus on vain lyhenne sanoista "sovellus". Mukautettu verkkosovellus on online-tietokantasovellus, jota käytetään pilvestä selaimen avulla. Rakennat ja ylläpidät verkkosovellusta työpöytäversiossa […]

Pikakäynnistyspalkki SharePoint 2010:ssä

Pikakäynnistyspalkki SharePoint 2010:ssä

Useimmat SharePoint 2010:n sivut näyttävät navigointilinkkien luettelon pikakäynnistyspalkissa sivun vasemmassa reunassa. Pikakäynnistyspalkki näyttää linkit esitellyn sivuston sisältöön, kuten luetteloihin, kirjastoihin, sivustoihin ja julkaisusivuihin. Pikakäynnistyspalkki sisältää kaksi erittäin tärkeää linkkiä: Koko sivuston sisältö -linkki: […]

Mitä Ratkaisijan virheilmoitukset Excelissä tarkoittavat?

Mitä Ratkaisijan virheilmoitukset Excelissä tarkoittavat?

Yksinkertaisille ongelmille Excelin Ratkaisija löytää yleensä nopeasti optimaaliset Ratkaisijamuuttujien arvot tavoitefunktiolle. Mutta joissakin tapauksissa Ratkaisijalla on vaikeuksia löytää Solver-muuttujan arvoja, jotka optimoivat tavoitefunktion. Näissä tapauksissa Ratkaisija näyttää yleensä viestin tai virheilmoituksen, joka kuvaa tai käsittelee ongelmaa, jonka […]