
ExcelVBA 処理速度を向上させることで、大量のデータ処理や繰り返し作業を効率化します。特に、行数が多いデータの処理や、セルの書き換えを伴う処理では、実行時間が大幅に短縮されます。使い方や注意点など、サンプルコードをもとに具体的に解説します。
Excel VBAの資格でキャリアアップ!
就活や転職で有利になるVBAエキスパート資格を解説!
👉 VBAエキスパート資格のメリットを詳しく知る
Excel VBA 高速化|シーン
以下のシーンで利用します。
1.大量データのコピー・貼り付け・計算を高速化
2.ループ処理の最適化(行数が多い場合の負荷軽減)
3.セル・シートの更新頻度を減らし、画面のちらつきを抑える
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 = True に戻すこと
・画面を頻繁に更新すると、VBAの処理速度が著しく低下する
計算式が多数あるシートでのセル更新を高速化
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 = ... を使うと遅くなるので配列を活用
・一括で書き込む方が処理が圧倒的に速い
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の資格でキャリアアップ!
就活や転職で有利になるVBAエキスパート資格を解説!
👉 VBAエキスパート資格のメリットを詳しく知る
Excel VBA 高速化|まとめ
方法 | 効果 |
画面更新を停止 (ScreenUpdating = False) | 画面のちらつきを防ぎ、高速化 |
自動計算を停止 (Calculation = xlCalculationManual) | 計算が多いシートで劇的に高速化 |
配列を使う | ループ処理を超高速化 |
Select を使わない | 不要な選択を減らして処理を最適化 |
オブジェクト変数を活用 | 同じ範囲を参照する場合に高速化 |
Excel VBAで自動化するコードのベースを習得したい方におすすめ!
VBAエキスパート資格は、日常業務でExcelを多用し、手動作業を減らしたいと考えている方には価値あるものです。
ExcelVBAエキスパートベーシック
仕事の効率をあげるためにExcelVBAを利用する人が対象の問題集です。
ExcelVBAエキスパートスタンダード
ExcelVBAの開発を仕事にする人が対象の問題集です。
Excel VBA エキスパート資格について知りたい方は、下記「Excel VBAスキルアップを目指すなら知っておきたいVBAエキスパート」をご確認ください。
Excel VBAの資格でキャリアアップ!
就活や転職で有利になるVBAエキスパート資格を解説!