以下の内容はhttps://htn20190109.hatenablog.com/entry/2024/07/14/092708より取得しました。


VBA(自動計算無効化)

 

https://excel-ubara.com/excelvba1/EXCELVBA357.html
https://daitaideit.com/vba-timer-now/#mokuzi2-2

結論: Application.Calculationは高速化効果はあるが、エラー時に元に戻らないため、安易な使用はできない

 

・エラー発生時

Application.DisplayAlertsはTrueに戻るか?
→ 元に戻る

Application.ScreenUpdatingはTrueに戻るか?
→ 元に戻る

Application.CalculationはxlCalculationAutomaticに戻るか?
→ 元に戻らない。エクセルを再起動しても戻らない

 

・高速化の効果
(1)
Application.ScreenUpdating = True
Application.Calculation = xlCalculationAutomatic

→ 7.3秒程度

(2)
Application.ScreenUpdating = False
Application.Calculation = xlCalculationAutomatic

→ 6.8秒程度

(3)
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual

→ 2.8秒程度


-- 1. 開発タブの挿入でボタンを作成
ActiveXコントロールのものを使用する

-- 2. デザインモードONで作成したボタンをダブルクリックするとエディタが開くので下記コードを記載。デザインモードOFFで実行

Private Sub CommandButton1_Click()

    
    '確認メッセージを表示しない
    Application.DisplayAlerts = False
    '画面を更新しない
    Application.ScreenUpdating = False
    '自動計算しない
    Application.Calculation = xlCalculationManual
    
    Dim t1 As Double
    Dim t2 As Double
    
    t1 = Timer
    
    Call main

Dim i As Long

i = 1 / 0

    t2 = Timer
    
    Debug.Print " t2-t1", t2 - t1
    
    MsgBox "処理完了"
    
    '確認メッセージを表示する
    Application.DisplayAlerts = True
    '画面を更新する
    Application.ScreenUpdating = True
    '自動計算する
    Application.Calculation = xlCalculationAutomatic

 

End Sub

 


Private Sub CommandButton2_Click()


    Call main

    
    MsgBox "処理完了"
    
    
End Sub


Private Sub CommandButton3_Click()


    '確認メッセージを表示する
    Application.DisplayAlerts = True
    '画面を更新する
    Application.ScreenUpdating = True
    '自動計算する
    Application.Calculation = xlCalculationAutomatic


    
    MsgBox "処理完了"
    
    
End Sub

 


Sub main()

    
    Dim wb As Workbook
    Dim sh As Worksheet
    
    
    Set wb = Workbooks.Add
    Set sh = wb.Worksheets(1)
    
    Debug.Print sh.Name
    
    '数式をセルに設定する
    Dim i As Long
    For i = 1 To 10000
    
        sh.Range("A" & CStr(i)).Value = CStr(Int(100 * Rnd) + 1)
        sh.Range("B" & CStr(i)).Value = CStr(Int(100 * Rnd) + 1)
        sh.Range("C" & CStr(i)).Formula = "=" & "A" & CStr(i) & "/" & "B" & CStr(i)
        
    Next i
    
    
    wb.SaveAs Filename:=ThisWorkbook.Path & "\test.xlsx"
    
    wb.Close

'    '
'    Kill ThisWorkbook.Path & "\test.xlsx"
    

    
End Sub

 

 




以上の内容はhttps://htn20190109.hatenablog.com/entry/2024/07/14/092708より取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14