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