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

 

ExcelVBA  処理速度を向上させることで、大量のデータ処理や繰り返し作業を効率化します。

 

特に、行数が多いデータの処理や、セルの書き換えを伴う処理では、「画面のちらつき」を抑え処理速度を向上 させ、ユーザーのストレスを軽減 できます。

 

実行時間が大幅に短縮されます。

 

使い方や注意点など、サンプルコードをもとに具体的に解説します。

 

📌 「これ、自動化できたらラクなのに…」と思ったこと、ありませんか?
実はその作業、Excelマクロで簡単に自動化できるかもしれません。
「でもマクロって難しそう…」という方のために、完全初心者向けの入門記事をご用意しました!

👇実務で“そのまま使える”テンプレ付きで、コピペするだけ
初心者向けエクセルマクロの作り方を解説|コピペOK実務テンプレ付き

 

Excel VBA 高速化|シーン

 

以下のシーンで利用します。

 

1.大量データのコピー・貼り付け・行削除・セル値変更・書式変更 ・計算の高速化

2.ループ(繰り返し)処理の最適化(行数が多い場合の負荷軽減)

3.シートを切り替えるマクロ(別のシートに移動して値を取得 など)

4.セル・シートの更新頻度を減らし、画面のちらつきを抑える

 

Excel VBA 高速化サンプルコード

 

セルを大量に操作する際、画面の描画更新を止めて処理を高速化

  1. Option Explicit
  2. Sub FastProcessing()
  3.     Application.ScreenUpdating = False ' 画面更新を停止
  4.     
  5.     Dim ws As Worksheet
  6.     Set ws = ThisWorkbook.Sheets("Sheet1")
  7.     
  8.     Dim i As Long
  9.     For i = 1 To 10000
  10.         ws.Cells(i, 1).Value = i ' A列に1?10000を入力
  11.     Next i
  12.     
  13.     Application.ScreenUpdating = True ' 画面更新を再開
  14. End Sub

 

・処理が開始で Application.ScreenUpdating = False で画面の更新を停止

・処理が完了したら Application.ScreenUpdating = True で通常の状態に戻す

・処理の途中で True に戻すと意味がない ので注意

 

自分の実力を客観的にチェックしたい…。そんな方のために、自分に合ったスタート地点がわかる無料のExcelVBAベーシック選択問題集をご用意しました。

👉無料ExcelVBAベーシック選択問題138問

 

計算式が多数あるシートでのセル更新を高速化

 

  1. Option Explicit
  2. Sub SpeedUpWithCalculation()
  3.     Application.ScreenUpdating = False
  4.     Application.Calculation = xlCalculationManual ' 自動計算を停止
  5.     
  6.     Dim ws As Worksheet
  7.     Set ws = ThisWorkbook.Sheets("Sheet1")
  8.     
  9.     Dim i As Long
  10.     For i = 1 To 10000
  11.         ws.Cells(i, 2).Value = i * 2 ' B列に計算結果を入力
  12.     Next i
  13.     
  14.     Application.Calculation = xlCalculationAutomatic ' 自動計算を再開
  15.     Application.ScreenUpdating = True
  16. End Sub

 

・計算式が含まれるシートでは特に効果的
・処理が終わったら Application.Calculation = xlCalculationAutomatic に戻すこと

 

1万行以上のデータを扱う際、ループで直接セルを操作せずに配列で処理する

 

  1. Option Explicit
  2. Sub UseArrayForSpeed()
  3.     Application.ScreenUpdating = False
  4.     Application.Calculation = xlCalculationManual
  5.     
  6.     Dim ws As Worksheet
  7.     Set ws = ThisWorkbook.Sheets("Sheet1")
  8.     
  9.     Dim dataArr() As Variant
  10.     Dim i As Long
  11.     
  12.     ' 1万行 × 1列分のデータを配列に格納
  13.     ReDim dataArr(1 To 10000, 1 To 1)
  14.     
  15.     For i = 1 To 10000
  16.         dataArr(i, 1) = i * 3 ' 計算処理
  17.     Next i
  18.     
  19.     ' 一括でセルに書き込み(高速)
  20.     ws.Range("A1:A10000").Value = dataArr
  21.     
  22.     Application.Calculation = xlCalculationAutomatic
  23.     Application.ScreenUpdating = True
  24. End Sub

 

・1セルずつ Cells(i, j).Value = ... を使うと遅くなるので配列を活用
・一括で書き込む方が処理が圧倒的に速い

 

自分の実力を客観的にチェックしたい…。そんな方のために、自分に合ったスタート地点がわかる無料のExcelVBAベーシック選択問題集をご用意しました。

👉無料ExcelVBAベーシック選択問題138問

 

Select や Activate を使わずにセルを直接指定して処理する(遅いコード(Select を使用))

 

  1. Option Explicit
  2. Sub SlowMethod()
  3.     Dim ws As Worksheet
  4.     Set ws = ThisWorkbook.Sheets("Sheet1")
  5.     
  6.     ws.Range("A1").Select
  7.     ActiveCell.Value = "遅い方法"
  8. End Sub

 

高速なコード

 

  1. Option Explicit
  2. Sub FastMethod()
  3.     Dim ws As Worksheet
  4.     Set ws = ThisWorkbook.Sheets("Sheet1")
  5.     
  6.     ws.Range("A1").Value = "高速な方法"
  7. End Sub

 

・Select や Activate を使うと不要な処理が増えて遅くなる
・直接セルに値を設定するのがベスト

 

同じシートやセル範囲を何度も参照する場合

 

  1. Option Explicit
  2. Sub UseObjectVariables()
  3.     Application.ScreenUpdating = False
  4.     Application.Calculation = xlCalculationManual
  5.     
  6.     Dim ws As Worksheet
  7.     Set ws = ThisWorkbook.Sheets("Sheet1")
  8.     
  9.     Dim rng As Range
  10.     Set rng = ws.Range("A1:A10000")
  11.     
  12.     Dim i As Long
  13.     For i = 1 To 10000
  14.         rng.Cells(i, 1).Value = i
  15.     Next i
  16.     
  17.     Application.Calculation = xlCalculationAutomatic
  18.     Application.ScreenUpdating = True
  19. End Sub

 

・ws.Range("A1:A10000") を直接何度も呼ぶと遅くなる → オブジェクト変数に格納して高速化
・Set を使って変数にオブジェクトを格納すると処理が速くなる

 

Excel VBA 高速化まとめ

 

方法 効果
画面更新を停止 (ScreenUpdating = False)

画面のちらつきを防ぎ、高速化

処理後に元に戻すことを忘れないこと。

自動計算を停止 (Calculation = xlCalculationManual)

計算が多いシートで劇的に高速化

処理後に元に戻すことを忘れないこと。

配列を使う ループ処理を超高速化
Select を使わない 不要な選択を減らして処理を最適化
オブジェクト変数を活用 同じ範囲を参照する場合に高速化

※デバッグ時は 、画面が止まるため、どこで止まっているのか分かりにくくなるためFalse を使わない。

 

以下、Excelアプリケーション全体を指すオブジェクトApplicationの記事です。※ここをクリックで一覧表示します

 

Excel VBAエキスパートベーシックとスタンダード、どちらを選べばいいか判断が難しい…。そんな方のために、自分に合ったスタート地点がわかる無料のExcelVBAベーシック選択問題集を用意しました。

👉無料ExcelVBAベーシック選択問題138問