Makrolarınızı Hızlandırmanın 10 Yolu

Excel makrolarınız giderek daha sağlam ve karmaşık hale geldikçe, performanslarını kaybettiklerini görebilirsiniz. Makroları tartışırken, performans kelimesi genellikle hız ile eş anlamlıdır . Hız, VBA prosedürlerinizin amaçlanan görevlerini ne kadar hızlı yerine getirdiğidir. Aşağıda, Excel makrolarınızın optimum performans düzeyinde çalışmasına yardımcı olacak on yol bulunmaktadır.

Sayfa hesaplamalarını durdurma

Elektronik tablonuzdaki herhangi bir formülü etkileyen bir hücre her değiştirildiğinde veya manipüle edildiğinde Excel'in tüm çalışma sayfasını yeniden hesapladığını biliyor muydunuz? Çok miktarda formül içeren çalışma sayfalarında bu davranış, makrolarınızı büyük ölçüde yavaşlatabilir.

Excel'e manuel hesaplama moduna geçmesini söylemek için Application.Calculation özelliğini kullanabilirsiniz. Bir çalışma kitabı manuel hesaplama modundayken, siz F9 tuşuna basarak bir hesaplamayı açıkça tetikleyene kadar çalışma kitabı yeniden hesaplama yapmaz.

Excel'i manuel hesaplama moduna alın, kodunuzu çalıştırın ve ardından otomatik hesaplama moduna geri dönün.

Alt Makro1()
Application.Calculation = xlCalculationManual
 'Makro kodunuzu buraya yerleştirin
Uygulama.Hesaplama = xlHesaplamaOtomatik
Alt Alt

Hesaplama modunu tekrar xlCalculationAutomatic olarak ayarlamak, çalışma sayfasının otomatik olarak yeniden hesaplanmasını tetikler, bu nedenle makronuz çalıştıktan sonra F9 tuşuna basmanız gerekmez.

Sayfa ekranı güncellemesini devre dışı bırakma

Makrolarınız çalıştığında, ekranınızın oldukça fazla titrediğini fark edebilirsiniz. Bu titreme, Excel'in çalışma sayfasının mevcut durumunu göstermek için ekranı yeniden çizmeye çalışmasıdır. Ne yazık ki, Excel ekranı her yeniden çizdiğinde, bellek kaynaklarını kaplar.

Makronuz tamamlanana kadar ekran güncellemelerini devre dışı bırakmak için Application.ScreenUpdating özelliğini kullanabilirsiniz. Ekran güncellemesini devre dışı bırakmak zaman ve kaynak tasarrufu sağlayarak makronuzun biraz daha hızlı çalışmasına olanak tanır. Makro kodunuzun çalışması bittikten sonra ekran güncellemesini tekrar açabilirsiniz.

Alt Makro1()
Application.Calculation = xlCalculationManual
Application.ScreenUpdating = Yanlış
 'Makro kodunuzu buraya yerleştirin
Uygulama.Hesaplama = xlHesaplamaOtomatik
Application.ScreenUpdating = Doğru
Alt Alt

ScreenUpdating özelliğini tekrar True olarak ayarladıktan sonra, Excel otomatik olarak ekranın yeniden çizilmesini tetikler.

Durum çubuğu güncellemelerini kapatma

Excel penceresinin altında görünen Excel durum çubuğu, normalde Excel'deki belirli eylemlerin ilerlemesini görüntüler. Makronuz çok sayıda veriyle çalışıyorsa, durum çubuğu bazı kaynakları alacaktır.

Ekran güncellemesini kapatmanın durum çubuğu görüntüsünü kapatmadan ayrı olduğunu unutmamak önemlidir. Durum çubuğu, ekran güncellemesini devre dışı bıraksanız bile güncellenmeye devam edecektir. Herhangi bir durum çubuğu güncellemesini geçici olarak devre dışı bırakmak ve makronuzun performansını daha da iyileştirmek için Application.DisplayStatusBar özelliğini kullanabilirsiniz:

Alt Makro1()
Application.Calculation = xlCalculationManual
Application.ScreenUpdating = Yanlış
Application.DisplayStatusBar = Yanlış
 'Makro kodunuzu buraya yerleştirin
Uygulama.Hesaplama = xlHesaplamaOtomatik
Application.ScreenUpdating = Doğru
Application.DisplayStatusBar = Doğru
Alt Alt

Excel'e olayları yok saymasını söyleme

Makroları, bir çalışma sayfası veya çalışma kitabı değiştiğinde Excel'e belirli kodu çalıştırmasını söyleyerek olay prosedürleri olarak uygulayabilirsiniz.

Bazen standart makrolar, bir olay prosedürünü tetikleyecek değişiklikler yapar. Örneğin, Sayfa1'deki birkaç hücreyi işleyen standart bir makronuz varsa, o sayfadaki bir hücre her değiştirildiğinde, Worksheet_Change olayı çalışırken makronuzun duraklaması gerekir.

Makronuz çalışırken Excel'e olayları yoksaymasını söylemek için EnableEvents özelliğini kullanarak başka bir performans artırma düzeyi ekleyebilirsiniz.

Makronuzu çalıştırmadan önce EnableEvents özelliğini False olarak ayarlayın. Makro kodunuzun çalışması tamamlandıktan sonra EnableEvents özelliğini tekrar True olarak ayarlayabilirsiniz.

Alt Makro1()
Application.Calculation = xlCalculationManual
Application.ScreenUpdating = Yanlış
Application.DisplayStatusBar = Yanlış
Application.EnableEvents = Yanlış
 'Makro kodunuzu buraya yerleştirin
Uygulama.Hesaplama = xlHesaplamaOtomatik
Application.ScreenUpdating = Doğru
Application.DisplayStatusBar = Doğru
Application.EnableEvents = Doğru
Alt Alt

Sayfa sonlarını gizleme

Makronuz satır sayısını, sütun sayısını veya bir çalışma sayfasının sayfa düzenini her değiştirdiğinde, Excel, sayfada gösterilen sayfa sonlarını yeniden hesaplamak için zaman ayırmaya zorlanır.

Makronuzu başlatmadan önce sayfa sonlarını gizleyerek bu davranışı önleyebilirsiniz.

Sayfa sonlarını gizlemek için DisplayPageBreaks sayfa özelliğini False olarak ayarlayın. Makronuz çalıştıktan sonra sayfa sonlarını göstermeye devam etmek istiyorsanız, DisplayPageBreaks sayfa özelliğini tekrar True olarak ayarlayın.

Alt Makro1()
Application.Calculation = xlCalculationManual
Application.ScreenUpdating = Yanlış
Application.DisplayStatusBar = Yanlış
Application.EnableEvents = Yanlış
Activesheet.DisplayPageBreaks = Yanlış
 'Makro kodunuzu buraya yerleştirin
Uygulama.Hesaplama = xlHesaplamaOtomatik
Application.ScreenUpdating = Doğru
Application.DisplayStatusBar = Doğru
Application.EnableEvents = Doğru
Activesheet.DisplayPageBreaks = Doğru
Alt Alt

Pivot tablo güncellemelerini askıya alma

Makronuz büyük veri kaynakları içeren özet tabloları yönetiyorsa, dinamik olarak pivot alanları ekleme veya taşıma gibi şeyler yaparken düşük performansla karşılaşabilirsiniz.

Tüm pivot alanı değişiklikleri yapılana kadar pivot tablonun yeniden hesaplanmasını askıya alarak makronuzun performansını artırabilirsiniz. Yeniden hesaplamayı ertelemek için PivotTable.ManualUpdate özelliğini True olarak ayarlayın, makro kodunuzu çalıştırın ve ardından yeniden hesaplamayı tetiklemek için PivotTable.ManualUpdate özelliğini tekrar False olarak ayarlayın.

Alt Makro1()
ActiveSheet.PivotTables("PivotTable1").ManualUpdate=Doğru
 'Makro kodunuzu buraya yerleştirin
ActiveSheet.PivotTables("PivotTable1").ManualUpdate=Yanlış
Alt Alt

Kopyala ve yapıştırdan uzak durmak

Unutulmamalıdır ki Macro Recorder sizin için VBA kodu yazarak zaman kazandırsa da her zaman en verimli kodu yazmaz. En iyi örnek, Macro Recorder'ın kayıt sırasında gerçekleştirdiğiniz herhangi bir kopyala-yapıştır eylemini nasıl yakaladığıdır.

Aracıyı keserek ve bir hücreden hedef hücreye doğrudan kopyalama gerçekleştirerek makrolarınıza hafif bir destek verebilirsiniz. Bu alternatif kod, panoyu atlamak ve A1 hücresinin içeriğini doğrudan B1 hücresine kopyalamak için Hedef bağımsız değişkenini kullanır.

Aralık("A1"). Hedefi Kopyala:=Aralık("B1")

Yalnızca değerleri kopyalamanız gerekiyorsa (biçimlendirme veya formüller değil), Kopyalama yönteminden hep birlikte kaçınarak performansı daha da artırabilirsiniz. Hedef hücrenin değerini, kaynak hücrede bulunanla aynı değere ayarlamanız yeterlidir. Bu yöntem, Kopyalama yöntemini kullanmaktan yaklaşık 25 kat daha hızlıdır:

Aralık("B1").Değer = Aralık("A1").Değer

Yalnızca formülleri bir hücreden diğerine kopyalamanız gerekiyorsa (değerler veya biçimlendirme değil), hedef hücrenin formülünü kaynak hücrede bulunan aynı formüle ayarlayabilirsiniz:

Aralık("B1").Formül = Aralık("A1").Formül

With ifadesini kullanma

Makro kaydederken, genellikle aynı nesneyi bir kereden fazla değiştireceksiniz. Belirli bir nesne üzerinde tek seferde birkaç eylem gerçekleştirmek için With ifadesini kullanarak zamandan tasarruf edebilir ve performansı artırabilirsiniz.

Aşağıdaki örnekte kullanılan With ifadesi, Excel'e tüm biçimlendirme değişikliklerini bir kerede uygulamasını söyler:

    Aralık ("A1") ile. Yazı Tipi
    .Kalın = Doğru
    .İtalik = Doğru
    .Underline = xlUnderlineStyleSingle
    İle bitmek

Eylemleri With ifadelerine bölme alışkanlığını edinmek, yalnızca makrolarınızın daha hızlı çalışmasını sağlamakla kalmaz, aynı zamanda makro kodunuzu okumayı da kolaylaştırır.

Select yönteminden kaçınma

Makro Kaydedici, nesneler üzerinde işlem yapmadan önce nesneleri açıkça seçmek için Select yöntemini kullanmayı sever. Onlarla çalışmadan önce genellikle nesneleri seçmeye gerek yoktur. Aslında, Select yöntemini kullanmayarak makro performansını önemli ölçüde artırabilirsiniz.

Makrolarınızı kaydettikten sonra, Select yöntemlerini kaldırmak için oluşturulan kodu değiştirmeyi alışkanlık haline getirin. Bu durumda, optimize edilmiş kod aşağıdaki gibi görünecektir:

    Sayfalar("Sayfa1").Aralık("A1").FormulaR1C1 = "1000"
    Sayfalar("Sayfa2").Range("A1").FormulaR1C1 = "1000"
    Sayfalar("Sayfa3").Range("A1").FormulaR1C1 = "1000"

Hiçbir şeyin seçilmediğini unutmayın. Kod, gerekli eylemleri uygulamak için yalnızca nesne hiyerarşisini kullanır.

Çalışma sayfasına gezileri sınırlama

Makrolarınızı hızlandırmanın başka bir yolu, kodunuzdaki çalışma sayfası verilerine başvurma sürenizi sınırlamaktır. Çalışma sayfasından veri almak bellekten almaktan her zaman daha az verimlidir. Yani, çalışma sayfasıyla tekrar tekrar etkileşime girmeleri gerekmiyorsa, makrolarınız çok daha hızlı çalışacaktır.

Örneğin, aşağıdaki basit kod, VBA'yı If deyiminde gerçekleştirilen karşılaştırma için gereken sayıyı almak için sürekli olarak Sheets(“Sayfa1”).Range(“A1”) öğesine dönmeye zorlar:

RaporAy için = 1 ila 12
     If Range("A1").Value = ReportMonth O zaman
     MsgBox 1000000 / RaporAy
Bitir
Sonraki RaporAy

Çok daha verimli bir yöntem, Sheets(“Sheet1”).Range(“A1”) içindeki değeri MyMonth adlı bir değişkene kaydetmektir. Bu şekilde kod, çalışma sayfası yerine MyMonth değişkenine başvurur:

MyMonth'u Tamsayı Olarak Karartın
MyMonth = Aralık("A1").Değer
RaporAy için = 1 ila 12
MyMonth = ReportMonth ise
MsgBox 1000000 / RaporAy
Bitir
Sonraki RaporAy

Çalışma sayfalarına doğrudan referans vermek yerine, bellekteki verilerle çalışmak için değişkenlerden yararlanmayı düşünün.

Aşırı Referanstan Kaçının

Bir nesnenin yöntemini veya özelliğini çağırırken, OLE bileşeninin IDispatch arabiriminden geçmesi gerekir. Bu OLE bileşenlerine yapılan çağrılar zaman alır, dolayısıyla OLE bileşenlerine yapılan başvuruların sayısını azaltmak makro kodun hızını artırabilir.

Nesne özelliklerinin veya yöntemlerinin çağrılması için  genellikle Object.Method'un temsil yöntemi  , yani "." kullanılır. Sembol, özellikleri ve yöntemleri çağırmak için kullanılır.

Bu nedenle yöntem veya özellik çağrılarının sayısı "." sembollerinin sayısına göre değerlendirilebilir. "." ne kadar azsa sembolü, kod ne kadar hızlı çalışırsa.

Örneğin aşağıdaki ifadede 3 sembol "." bulunmaktadır.

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

Aşağıdaki ifadede yalnızca bir "." simgesi vardır.

Activewindow.Top = 100

İşte "." sembollerinin sayısını azaltmak için bazı püf noktaları. daha hızlı koşmak için.

İlk olarak, aynı nesneye tekrar tekrar başvurmanız gerektiğinde, çağrı sayısını azaltmak için nesneyi bir değişkene ayarlayabilirsiniz. Örneğin aşağıdaki kod, satır başına iki çağrı gerektirir.

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

Sheets("Sheet1") nesnesine tekrar tekrar başvurulması gerektiğinden  , önce sht  değişkenine ayarlanabilir   , böylece her kodun yalnızca bir kez çağrılması yeterli olur.

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

İkincisi, geçici bir sht değişkeni bildirmek istemiyorsanız,  daha önce bahsedilen With  ifadesini de kullanabilirsiniz. Aşağıdaki örnekte gösterildiği gibi:

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

Üçüncüsü,  çok sayıda döngü olduğunda özellikleri ve yöntemleri döngünün dışında tutmaya çalışın.  Aynı nesnenin özellik değerini bir döngüde yeniden kullanırken, önce özellik değerini döngünün dışındaki belirli bir değişkene atayabilir ve daha sonra daha hızlı hız elde edebilecek şekilde döngüdeki değişkeni kullanabilirsiniz. Aşağıdaki örnekte gösterildiği gibi:

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

Bu örnekteki her döngü, Cells(1,2) hücresinin Value özelliğini alır. Döngü başlamadan önce Cells(1.2)'in Value özelliğini bir değişkene atarsanız daha hızlı bir çalışma elde edersiniz. Aşağıdaki örnekte gösterildiği gibi:

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

Yukarıdaki kod  her döngüde ThisWorkbook.Sheets("Sheet1")  öğesini çağırır.  Çağrıyı döngünün dışındaki ThisWorkbook.Sheets("Sheet1")  öğesine taşımak için  With deyimini kullanarak bunu daha hızlı yapabilirsiniz  . Aşağıdaki örnekte gösterildiği gibi:

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

Varyant Türlerini Kullanmaktan Kaçının

Yeni başlayanlar genellikle Variant türü değişkenleri kullanmayı tercih ederler; bu, daha az karmaşık olma avantajına sahiptir çünkü veriler Tamsayı veya Uzun veri türleri için çok büyükse, herhangi bir veri türü bellek taşması sorunu olmadan kullanılabilir. Ancak Varienmt türü veriler, belirtilen diğer türlere göre daha fazla ekstra bellek alanı gerektirir (Tamsayı verileri için 2 bayt, Uzun veriler için 4 bayt ve Variant verileri için 16 bayt), VBA, Variant türü verileri işlemek için diğer belirtilen türlere göre daha fazla zaman gerektirir. veri. Aşağıdaki örnekte gösterildiği gibi.

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

Yukarıdaki kodda, 8'den 13'e kadar olan satırlar, Variant değişkenlerinde 1 milyon toplama, çıkarma, çarpma ve bölme işlemi gerçekleştirir ve 17'den 22'ye kadar olan satırlar, Tamsayı değişkenlerinde 1 milyon toplama, çıkarma, çarpma ve bölme işlemi yapar. Bilgisayarımda Variant değişkeninin işlemi yaklaşık  0,09375  saniye sürerken, Integer değişkeninin işlemi yaklaşık  0,03125  saniye sürdü. Sonuçlar bilgisayardan bilgisayara farklılık gösterebilir ancak  Variant değişkenleri Tamsayı değişkenlerinden önemli ölçüde daha yavaştır .

Bu nedenle,  belirtilen veri türünü açıkça kullanabileceğiniz durumlarda Variant değişkenlerini kullanmaktan kaçınmanız önerilir .


Akıllı Sayfa 9.1.1

Akıllı Sayfa 9.1.1

Smartsheet, projeleri yönetmenize, iş akışları oluşturmanıza ve ekibinizle işbirliği yapmanıza olanak tanıyan dinamik bir çalışma platformudur.

Paylaşım Noktası

Paylaşım Noktası

SharePoint, çeşitli iş akışı uygulamalarını, veritabanlarını ve diğer web bileşenlerini "listeleme"nin yanı sıra İş gruplarının birlikte çalışmasını kontrol etmek için güvenlik özelliklerini kullanan web tabanlı bir işbirliği sistemidir.

Sonsuz Takvim 1.0.38/1.0.36

Sonsuz Takvim 1.0.38/1.0.36

Van Nien Takvimi, telefonunuzda ay-güneş tarihini hızlı bir şekilde görmenize yardımcı olan ve böylece önemli işlerinizi düzenlemenize yardımcı olan, telefonunuzda bir takvim görüntüleme uygulamasıdır.

MicrosoftOutlook 2021

MicrosoftOutlook 2021

Microsoft Outlook, Microsoft Corporation tarafından geliştirilen bir iş ve verimlilik uygulamasıdır.

Tıklama

Tıklama

ClickUp, herhangi bir işletme için en yüksek puan alan üretkenlik platformlarından biridir. Google, Booking.com, San Diego Padres ve Uber gibi büyük işletmelerin tümü işyeri verimliliğini artırmak için ClickUp'ı kullanıyor.

PDF-XChange Görüntüleyici 2.5.322.10

PDF-XChange Görüntüleyici 2.5.322.10

PDF, metin belgelerini okumak, oluşturmak ve göndermek için yaygın olarak kullanılan bir format haline geldi. Buna karşılık, bu tür dokümantasyon için kullanılan programların sayısı da arttı. PDF-XChange Viewer, giderek artan sayıda PDF görüntüleyici arasında yer alıyor.

Apache Açık Ofisi

Apache Açık Ofisi

Apache OpenOffice, özellikle Excel, PowerPoint ve Word'de Microsoft 365'e rakip olabilecek eksiksiz bir Office uygulamaları paketi sunar. Projelerinizi daha etkili bir şekilde yönetmenize olanak tanır ve çeşitli dosya formatlarını destekler.

iTaxviewer 1.8.7yi indirin

iTaxviewer 1.8.7yi indirin

iTaxViewer yazılımı günümüzün en popüler XML dosyası okuma yazılımıdır. Bu yazılım Vergi Genel Müdürlüğü'nün XML formatındaki elektronik vergi beyannamelerini okumaya yönelik bir uygulamadır.

Nitro PDF Okuyucu

Nitro PDF Okuyucu

Nitro PDF Reader, çoğu insanın her gün PDF belgeleriyle gerçekleştirdiği tüm temel görevleri kapsayan kullanışlı bir PDF düzenleyicidir.

Foxit Okuyucu 12

Foxit Okuyucu 12

Foxit Reader öncelikle bir PDF okuyucudur ve ayrıca PDF dosyaları oluşturmanıza, imzalamanıza, düzenlemenize ve açıklamalar eklemenize olanak tanır. İşletim sistemlerinde çalışır, Microsoft Office paketinde çeşitli programlar için eklentiler vardır.