大量データの処理を速くする
画面更新と計算方法を一時的に変更し、終了時・エラー時のどちらも実行前の設定へ戻すひな型です。
実行前に確認
- 高速化の程度は処理内容で変わります。手動計算中に数式の最新結果が必要なら対象範囲をCalculateしてください。
- VBEのリセットボタンやEnd文で強制終了すると復元処理が動きません。設定はExcel全体に影響します。
1サンプルコード
Sub 高速化して処理する()
Dim oldScreen As Boolean, oldCalc As XlCalculation
Dim errorNumber As Long, errorText As String
oldScreen = Application.ScreenUpdating
oldCalc = Application.Calculation
On Error GoTo Failed
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
'ここに処理を書く。例: ThisWorkbook.Worksheets("Sheet1").Range("A1").Value = 1
CleanUp:
On Error Resume Next
Application.Calculation = oldCalc
Application.ScreenUpdating = oldScreen
On Error GoTo 0
If errorNumber <> 0 Then MsgBox "エラー " & errorNumber & ": " & errorText
Exit Sub
Failed:
errorNumber = Err.Number
errorText = Err.Description
Resume CleanUp
End Sub図で見る操作の流れ
イメージ図概念図:処理前の設定を記憶してから、一時的に負荷を抑えます。
マクロ:状態保存
画面更新と計算方法の元の設定を覚える
マクロ:一時変更
画面更新を止め、計算を手動にする
処理を入れる場所
現在はコメントのみ。必要な処理をここへ追加
マクロ:復元
正常終了・エラー時とも元の設定へ復元を試みる
現状のコードはA1へ書き込みません。強制終了では復元されず、設定はExcel全体へ影響します。
コードの処理を説明する模式図です。実際の画面や実行結果を撮影したものではありません。
使い方・実行手順を確認する4つの手順で、コードの使い方を確認できます
- 1
Windows版のデスクトップExcelで練習用ブックを.xlsm形式で保存します。Alt+F11→[挿入]→[標準モジュール]に、この例だけを貼り付けます。
- 2
「ここに処理を書く」の位置へ、動作確認済みのセル処理などを入れます。何も追加しなければ、設定を切り替えて元へ戻すだけです。
- 3
実行するSubの内側にカーソルを置き、F5キーを押します。
- 4
追加した処理が終わると、計算方法と画面更新は実行前の設定へ戻ります。処理でエラーが出た場合も復元を試み、エラー内容を表示します。