※本記事の数式やコードは、Microsoft 365(旧Office365)にて動作検証を行っています。
VBAで「For…Next」で大量データを一瞬で処理!繰り返し作業を自動化するコピペOKコード集
「毎日おなじ作業をコピペして…もう嫌だ」
「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 カウンター変数- カウンター変数:繰り返しの回数を数える箱(名前は
iやjが定番) - 開始値:何番目からスタートするか
- 終了値:何番目で終わるか
VBAエディターを開く
- Excelを開き、キーボードで Alt + F11 を押す
- 「Visual Basic Editor(VBE)」が開く
- 左のメニューから「挿入」→「標準モジュール」をクリック
コードを書いて実行する
Sub 連番を入力する()
Dim i As Long
For i = 1 To 10
Cells(i, 1).Value = i 'A列のi行目に数字を入れる
Next i
MsgBox "完了しました!"
End Subマクロを実行する
- コード内のどこかにカーソルを置く
- キーボードで F5 を押す(または「実行」→「Sub/ユーザーフォームの実行」)
- ExcelのA1〜A10に「1〜10」が自動で入力される
けんけん実務で使える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② 条件に合う行だけ処理する(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
けんけん③ 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テクニック② 二重ループで「表全体」を処理する
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の値を見直す。
けんけん❌ 処理が遅すぎる
原因: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に切り分けると、読みやすく再利用しやすいコードになる



