VBAで「For…Next」で大量データを一瞬で処理!繰り返し作業を自動化するコピペOKコード集

INFO

※本記事の数式やコードは、Microsoft 365(旧Office365)にて動作検証を行っています。


「毎日おなじ作業をコピペして…もう嫌だ」
「100行・1000行のデータに同じ処理をしたい」
「VBAって難しそうで手が出せない」

こんな悩み、ありませんか?

Excel VBAのFor…Next構文を使えば、「同じ操作を何百回も繰り返す」作業をたった数行のコードで一瞬に変えられます。手作業でやると30分かかる処理も、ボタン1つで終わらせることができます。

この記事では、初めてVBAに触れる方でもすぐに使えるコピペOKのコードと、実務でそのまま使えるテクニックをまとめて解説します。


目次

For…Nextとは?何ができるの?

For…Nextは「同じ処理を指定した回数だけ繰り返す」ための構文です。

たとえば「A1からA100セルに、1〜100の数字を入れたい」と思ったとき、手作業なら100回入力が必要です。For…Nextを使えば、こんな書き方で一瞬で終わります。

For i = 1 To 100
    Cells(i, 1).Value = i
Next i

たったこれだけです。

手作業 vs For…Next 比較表

作業内容手作業For…Next
100行に連番を入力約5分1秒以下
1000行のデータを加工30分〜1時間数秒
条件に合う行をチェック見落としリスクあり完全自動・ミスなし
作業の再現性毎回手作業ボタン1つで再実行

For…Nextの基本構文と使い方

基本の書き方

For カウンター変数 = 開始値 To 終了値
    '繰り返したい処理をここに書く
Next カウンター変数
  • カウンター変数:繰り返しの回数を数える箱(名前はijが定番)
  • 開始値:何番目からスタートするか
  • 終了値:何番目で終わるか
STEP

VBAエディターを開く

  1. Excelを開き、キーボードで Alt + F11 を押す
  2. 「Visual Basic Editor(VBE)」が開く
  3. 左のメニューから「挿入」→「標準モジュール」をクリック
STEP

コードを書いて実行する

Sub 連番を入力する()
    Dim i As Long
    
    For i = 1 To 10
        Cells(i, 1).Value = i  'A列のi行目に数字を入れる
    Next i
    
    MsgBox "完了しました!"
End Sub
STEP

マクロを実行する

  1. コード内のどこかにカーソルを置く
  2. キーボードで F5 を押す(または「実行」→「Sub/ユーザーフォームの実行」)
  3. ExcelのA1〜A10に「1〜10」が自動で入力される
けんけん
F5キーで即実行できます。実行前に必ず上書き保存しておくと安心です。

実務で使えるFor…Nextコード集

① 最終行まで自動で処理する(最重要テクニック)

データが何行あるかわからないとき、最終行を自動取得して処理を止める方法です。実務では必須の書き方です。

Sub 最終行まで処理する()
    Dim i As Long
    Dim lastRow As Long
    
    '最終行を取得する
    lastRow = Cells(Rows.Count, 1).End(xlUp).Row
    
    For i = 2 To lastRow  '2行目(ヘッダーの次)からスタート
        Cells(i, 3).Value = Cells(i, 1).Value & Cells(i, 2).Value  'A列+B列をC列に結合
    Next i
    
    MsgBox "処理完了!" & lastRow - 1 & "件を処理しました。"
End Sub
Excelシート 担当者名 売上金額 田中 太郎 12,000 鈴木 花子 8,500 佐藤 一郎 22,000 高橋 美咲 5,100 渡辺 健太 19,800 ← 最終行(6行目) (空) (空) ① 最終行を自動取得 End(xlUp).Row ② For i = 2 To lastRow ループ開始 ③ 各行を処理 Cells(i, 3).Value = … ④ 最終行で自動終了 Next i → 完了 繰り返し 処理結果 結合結果 判定 田中12000 ✔ 処理済 鈴木8500 ✔ 処理済 佐藤22000 ✔ 処理済 高橋5100 ✔ 処理済 渡辺19800 ✔ 処理済 処理しない(空白) データが何行あっても OK ── lastRow を自動取得するので追加・削除しても修正不要 Cells(Rows.Count, 1).End(xlUp).Row で常に最終行を正確に拾う

② 条件に合う行だけ処理する(If文との組み合わせ)

For…NextとIf文を組み合わせると、「条件に合う行だけ色を付ける」といった処理ができます。

Sub 条件に合う行に色をつける()
    Dim i As Long
    Dim lastRow As Long
    
    lastRow = Cells(Rows.Count, 1).End(xlUp).Row
    
    For i = 2 To lastRow
        If Cells(i, 3).Value >= 10000 Then  'C列が10000以上なら
            Rows(i).Interior.Color = RGB(255, 255, 153)  '黄色でハイライト
        End If
    Next i
    
    MsgBox "チェック完了!"
End Sub
けんけん
「RGB(255, 255, 153)」は黄色を表します。色を変えたいときはRGBの数値を変えてください。

③ Stepを使って「飛び飛び」で処理する

Stepを付けると、1行おき・2行おきに処理することもできます。

Sub 2行おきに処理する()
    Dim i As Long
    
    For i = 2 To 20 Step 2  '2, 4, 6, 8...と2つ飛びに処理
        Rows(i).Interior.Color = RGB(220, 230, 242)  '薄い青でゼブラ模様
    Next i
End Sub

④ 逆順(大きい数から小さい数)に繰り返す

行を削除する処理では、下から上に向かって処理するのが鉄則です。上から削除すると行番号がズレてしまいます。

Sub 空白行を上から消す()
    Dim i As Long
    Dim lastRow As Long
    
    lastRow = Cells(Rows.Count, 1).End(xlUp).Row
    
    For i = lastRow To 2 Step -1  '下から上に向かって処理!
        If Cells(i, 1).Value = "" Then  'A列が空白なら
            Rows(i).Delete  '行を削除
        End If
    Next i
    
    MsgBox "空白行を削除しました!"
End Sub
けんけん
行削除は必ず「下から上」の順番で処理しましょう。上から処理すると行番号がズレてうまく動きません。

時短・効率化テクニック

テクニック① 処理速度を大幅に上げる3行のおまじない

大量データを処理するときは、以下の3行をコードの先頭と末尾に追加するだけで、処理速度が劇的に速くなります

Sub 高速処理のテンプレート()
    '--- 処理開始前に設定 ---
    Application.ScreenUpdating = False   '画面の更新を止める
    Application.Calculation = xlCalculationManual  '自動計算を止める
    Application.EnableEvents = False     'イベントを止める
    
    Dim i As Long
    Dim lastRow As Long
    lastRow = Cells(Rows.Count, 1).End(xlUp).Row
    
    For i = 2 To lastRow
        '処理をここに書く
    Next i
    
    '--- 処理終了後に必ず元に戻す ---
    Application.ScreenUpdating = True
    Application.Calculation = xlCalculationAutomatic
    Application.EnableEvents = True
    
    MsgBox "完了!"
End Sub
処理速度を上げる「3点セット」 設定 OFF(遅い) 設定 ON(速い) 設定項目 画面が毎回更新 → チラつき・遅延 ScreenUpdating = False 画面の再描画を止める 処理後に True に戻す 画面は最後だけ更新 → 高速化 A1=SUM… B1=A1*2 C1=B1+… ↓ セル変更のたびに再計算 Calculation = xlCalculationManual 自動計算を止める 処理後に Automatic に戻す A1=SUM… B1=A1*2 C1=B1+… ↓ 最後に一括再計算 変更 発火 発火 セル変更→マクロ→ また変更…の連鎖 → 余計な処理が走る EnableEvents = False イベント発火を止める 処理後に True に戻す 変更 イベント発火なし → 余計な処理ゼロ ⚠️ 3つとも必ず「元に戻す」こと 処理完了後に True / Automatic / True へ戻さないと、Excel全体の動作がおかしくなる 処理速度イメージ(1000行処理) 設定なし 約30秒 3点セット 約3秒

テクニック② 二重ループで「表全体」を処理する

For…Nextを2つ重ねると、「行×列」の表全体を処理できます。

Sub 表全体に処理する()
    Dim i As Long, j As Long
    
    For i = 1 To 5   '行方向(1〜5行)
        For j = 1 To 3  '列方向(1〜3列)
            Cells(i, j).Value = i & "行" & j & "列"
        Next j
    Next i
End Sub

テクニック③ ショートカットキー一覧

操作ショートカット
VBEを開くAlt + F11
コードを実行F5
ステップ実行(1行ずつ)F8
コードを中断Esc または Ctrl + Break
モジュールを保存Ctrl + S

うまくいかないときのトラブルシューティング

❌ 「実行時エラー ‘9’:インデックスが有効範囲にありません」

原因:存在しないシートやセルにアクセスしようとしている。

解決策Cells(i, 1)の行番号・列番号が正しいか確認する。シート名が間違っていないか確認する。

'シートを明示的に指定する書き方(推奨)
Worksheets("Sheet1").Cells(i, 1).Value = i

❌ コードが終わらない(無限ループ)

原因:終了値の指定ミス、またはStep -1を忘れて逆方向にカウントしている。

解決策Ctrl + Break キーを押して強制中断する。コードの開始値・終了値・Stepの値を見直す。

けんけん
無限ループになったときはCtrl + Breakで止められます。慌てずに押してみてください。

❌ 処理が遅すぎる

原因Application.ScreenUpdating = False を設定していない。

解決策:「時短テクニック①」で紹介した3行のおまじないを追加する。


❌ 「変数が定義されていません」エラー

原因:コードの先頭に Option Explicit があるのに、変数の Dim 宣言を忘れている。

解決策:使う変数はすべて Dim i As Long のように宣言する。


まとめ

  • **For…Nextは「同じ処理を指定回数繰り返す」**ための基本構文
  • 最終行を自動取得すれば、データ量が変わっても対応できる
  • If文と組み合わせると「条件付き処理」が自動化できる
  • **逆順(Step -1)**で処理すると、行削除時の行ズレを防げる
  • 3行のおまじない(ScreenUpdating等)で大量データも高速処理できる

繰り返し作業はVBAに任せて、あなたはもっと大切な仕事に時間を使いましょう。まずはコードをコピペして、F5で動かすところから始めてみてください!


次のステップへ進もう

For…Nextをマスターしたら、次はこれを覚えるとVBAの幅がぐっと広がります。

  • Do…Loop構文:「条件を満たすまで繰り返す」ループ。回数が決まっていない処理(例:データが見つかるまで探し続ける)に使う
  • For Each…Next構文:セル範囲やシートなど「コレクション(まとまり)」の中身を1つずつ取り出して処理する。シートを全部ループするときなどに便利
  • Subプロシージャの分割(モジュール化):長くなったコードを「意味のある処理ごと」に別のSubに切り分けると、読みやすく再利用しやすいコードになる
よかったらシェアしてね!
  • URLをコピーしました!
目次