
ExcelVBA 処理速度を向上させることで、大量のデータ処理や繰り返し作業を効率化します。
特に、行数が多いデータの処理や、セルの書き換えを伴う処理では、「画面のちらつき」を抑え処理速度を向上 させ、ユーザーのストレスを軽減 できます。
実行時間が大幅に短縮されます。
使い方や注意点など、サンプルコードをもとに具体的に解説します。
📌 「これ、自動化できたらラクなのに…」と思ったこと、ありませんか?
実はその作業、Excelマクロで簡単に自動化できるかもしれません。
「でもマクロって難しそう…」という方のために、完全初心者向けの入門記事をご用意しました!
👇実務で“そのまま使える”テンプレ付きで、コピペするだけ!
初心者向けエクセルマクロの作り方を解説|コピペOK実務テンプレ付き
Excel VBA 高速化|シーン
以下のシーンで利用します。
1.大量データのコピー・貼り付け・行削除・セル値変更・書式変更 ・計算の高速化
2.ループ(繰り返し)処理の最適化(行数が多い場合の負荷軽減)
3.シートを切り替えるマクロ(別のシートに移動して値を取得 など)
4.セル・シートの更新頻度を減らし、画面のちらつきを抑える
Excel VBA 高速化|サンプルコード
- Option Explicit
- Sub FastProcessing()
- Application.ScreenUpdating = False ' 画面更新を停止
- Dim ws As Worksheet
- Set ws = ThisWorkbook.Sheets("Sheet1")
- Dim i As Long
- For i = 1 To 10000
- ws.Cells(i, 1).Value = i ' A列に1?10000を入力
- Next i
- Application.ScreenUpdating = True ' 画面更新を再開
- End Sub
・処理が開始で Application.ScreenUpdating = False で画面の更新を停止
・処理が完了したら Application.ScreenUpdating = True で通常の状態に戻す
・処理の途中で True に戻すと意味がない ので注意
自分の実力を客観的にチェックしたい…。そんな方のために、自分に合ったスタート地点がわかる無料のExcelVBAベーシック選択問題集をご用意しました。
計算式が多数あるシートでのセル更新を高速化
- Option Explicit
- Sub SpeedUpWithCalculation()
- Application.ScreenUpdating = False
- Application.Calculation = xlCalculationManual ' 自動計算を停止
- Dim ws As Worksheet
- Set ws = ThisWorkbook.Sheets("Sheet1")
- Dim i As Long
- For i = 1 To 10000
- ws.Cells(i, 2).Value = i * 2 ' B列に計算結果を入力
- Next i
- Application.Calculation = xlCalculationAutomatic ' 自動計算を再開
- Application.ScreenUpdating = True
- End Sub
・計算式が含まれるシートでは特に効果的
・処理が終わったら Application.Calculation = xlCalculationAutomatic に戻すこと
1万行以上のデータを扱う際、ループで直接セルを操作せずに配列で処理する
- Option Explicit
- Sub UseArrayForSpeed()
- Application.ScreenUpdating = False
- Application.Calculation = xlCalculationManual
- Dim ws As Worksheet
- Set ws = ThisWorkbook.Sheets("Sheet1")
- Dim dataArr() As Variant
- Dim i As Long
- ' 1万行 × 1列分のデータを配列に格納
- ReDim dataArr(1 To 10000, 1 To 1)
- For i = 1 To 10000
- dataArr(i, 1) = i * 3 ' 計算処理
- Next i
- ' 一括でセルに書き込み(高速)
- ws.Range("A1:A10000").Value = dataArr
- Application.Calculation = xlCalculationAutomatic
- Application.ScreenUpdating = True
- End Sub
・1セルずつ Cells(i, j).Value = ... を使うと遅くなるので配列を活用
・一括で書き込む方が処理が圧倒的に速い
自分の実力を客観的にチェックしたい…。そんな方のために、自分に合ったスタート地点がわかる無料のExcelVBAベーシック選択問題集をご用意しました。
Select や Activate を使わずにセルを直接指定して処理する(遅いコード(Select を使用))
- Option Explicit
- Sub SlowMethod()
- Dim ws As Worksheet
- Set ws = ThisWorkbook.Sheets("Sheet1")
- ws.Range("A1").Select
- ActiveCell.Value = "遅い方法"
- End Sub
高速なコード
- Option Explicit
- Sub FastMethod()
- Dim ws As Worksheet
- Set ws = ThisWorkbook.Sheets("Sheet1")
- ws.Range("A1").Value = "高速な方法"
- End Sub
・Select や Activate を使うと不要な処理が増えて遅くなる
・直接セルに値を設定するのがベスト
同じシートやセル範囲を何度も参照する場合
- Option Explicit
- Sub UseObjectVariables()
- Application.ScreenUpdating = False
- Application.Calculation = xlCalculationManual
- Dim ws As Worksheet
- Set ws = ThisWorkbook.Sheets("Sheet1")
- Dim rng As Range
- Set rng = ws.Range("A1:A10000")
- Dim i As Long
- For i = 1 To 10000
- rng.Cells(i, 1).Value = i
- Next i
- Application.Calculation = xlCalculationAutomatic
- Application.ScreenUpdating = True
- End Sub
・ws.Range("A1:A10000") を直接何度も呼ぶと遅くなる → オブジェクト変数に格納して高速化
・Set を使って変数にオブジェクトを格納すると処理が速くなる
Excel VBA 高速化|まとめ
| 方法 | 効果 |
| 画面更新を停止 (ScreenUpdating = False) |
画面のちらつきを防ぎ、高速化 ※処理後に元に戻すことを忘れないこと。 |
| 自動計算を停止 (Calculation = xlCalculationManual) |
計算が多いシートで劇的に高速化 ※処理後に元に戻すことを忘れないこと。 |
| 配列を使う | ループ処理を超高速化 |
| Select を使わない | 不要な選択を減らして処理を最適化 |
| オブジェクト変数を活用 | 同じ範囲を参照する場合に高速化 |
※デバッグ時は 、画面が止まるため、どこで止まっているのか分かりにくくなるためFalse を使わない。
「Excel VBAで自動化するコードのベースが習得できる解説書」
Excel VBAエキスパートベーシックとスタンダード、どちらを選べばいいか判断が難しい…。そんな方のために、自分に合ったスタート地点がわかる無料のExcelVBAベーシック選択問題集を用意しました。
