Excel VBA 高速化で大量のデータ処理や繰り返し作業を効率化する方法

 

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エキスパート資格を解説!