繰り返し処理の基本!ExcelマクロでFor Nextを学ぼう

ようこそ♪ささぽんのExcel教室へ。
前回の記事では、条件分岐の「If文」を使って、マクロの動きを分ける方法を学びました。
今回はそこから一歩進んで、「繰り返し処理」の基本となるFor〜Next構文についてご紹介します!
この記事を読めば、「同じ作業を何度も繰り返す」あの作業を、マクロでサクッと自動化できるようになりますよ♪

この記事は以下のような方におすすめです!
・If文までは理解できたけど、その先に進みたい方
・マクロで「繰り返し処理」を書けるようになりたい方
・For〜Next構文って何?という方
このブログは「基礎からExcelマクロを学びたいと考えている方」や、
「独学での習得に壁を感じた方」に向けて、やさしく、わかりやすく、丁寧に解説しています。
読み終わるころにはきっと、
「Excelマクロって意外と簡単かも!」「もっとやってみたい!」と思えるはず。
一緒に楽しく学びながら、Excelマクロ使いを目指しましょう!
![]() | よくわかる Microsoft® Excel® マクロ/VBA Office 2021/2019/2016/Microsoft 365対応 [ 富士通ラーニングメディア ] 価格:2860円 |
![]() | Excel自動化[最強]時短仕事術 マクロ/VBAの基本&業務効率化の即効サンプル【電子書籍】[ 守屋 恵一【著】 ] 価格:1518円 |
目次
4.実務で役立つFor〜Nextの応用例
■活用例①:複数のシートに同じ処理をまとめて適用する
■活用例②:条件に一致した行を別シートに転記する
■活用例③:ループの中にループを書く(ネスト処理)
■関数でできる処理をマクロで書く意味
1.For〜Next構文とは?
Excelマクロを使っていると、「同じ処理を繰り返すコードを書きたい!」という場面が出てくると思います。
例えば:
- 「A列の全行に、順番に通し番号を入れたい」
- 「条件に一致するかを1行ずつ確認し、一致した行をコピペしたい」
このような「1行ずつ順番に、同じような処理をしたい」というときに活躍するのが、For〜Next構文です。
■For〜Next構文の基本の形を見てみよう
まずは、For〜Next構文の基本的な書き方を見てみましょう:
For i = 1 To 10
繰り返したい処理
Next i
この構文は、「i = 1」から「i = 10」まで、指定した回数だけ処理を繰り返すという意味です。
- Forで繰り返しの始まりを指定
- Toで終了値を指定
- Nextで「次へ」と進む
という流れになっており、i はカウンター変数として、今が何回目の処理かを数えてくれます。
このコードの場合、最初に i = 1 からスタートし、次に2、3、…と1ずつ増えていき、最後は i = 10 になるまで処理が繰り返されます。
つまり、1回目はi=1、2回目はi=2…というように、全部で10回処理が実行されるという仕組みです。
ちなみに、こういった繰り返し処理は、マクロの記録機能では自動では作られません。
マクロ記録は「今この瞬間に行った操作」を1つずつそのまま記録する機能なので、同じ操作を10回手動で繰り返したとしても、「繰り返し処理」としては記録されず、10回分の操作がただ並ぶだけになります。
実際に、A1〜A3のセルに「Hello」と入力して記録した場合、こんなコードになります:
Range("A1").Value = "Hello"
Range("A2").Value = "Hello"
Range("A3").Value = "Hello"
このように、1つずつの操作がそのまま並ぶだけで、「まとめて処理する仕組み」は自動で作られません。
しかしFor〜Next構文を自分で書けるようになると、わずか数行のコードでまとめて繰り返す処理が自動化できるようになります!
■リレーで考えるFor〜Nextの流れ
For〜Next構文の仕組みのイメージとして、「リレー競走」を考えてみましょう!
例えば、4人1組のリレーチームがバトンをつないでゴールを目指すとします。
スタートするのは1番目の走者(i = 1)。
走り終えると2番目の走者(i = 2)にバトンを渡し、次は3番目(i = 3)…
というように、1人ずつ順番に走っていき、最後の4番目(i = 4)でゴール、つまり処理の終了です!
この流れをFor〜Next構文でイメージすると、こんな感じになります:
For i = 1 To 4
' i番目の人が走る
Next i
このコードは、i = 1〜4まで順番に「走る」=処理が行われる、という状況を例えてみたものです。
ここで使われている「i」は、今が何番目の処理かを管理するための番号=カウンター変数です。
i = 1 から始まり、毎回1ずつ増えて、処理を次に渡していくバトンのような役割を果たしています。
こうして考えると、「カウンター変数 i が進むごとに、1人ずつバトンをつなぐように処理が進む」という構図がイメージしやすいですよね♪

■実際に書いてみよう!For〜Nextの基本コード
では、For〜Next構文を使って、Excelシートに1〜10の数字を順番に書き込むマクロを作ってみましょう!
以下のコードは、セルA1〜A10に、1から10までの数字を入れるものです。
Sub SampleForNext()
Dim i As Integer
For i = 1 To 10
Cells(i, 1).Value = i
Next i
End Sub
このコードでは、iの値が1〜10まで順に変化しながら、Cells(i, 1)=「A列のi行目」にそのままの値を書き込んでいます。
F8キーでステップ実行してみよう!
このマクロをより深く理解するために、VBEでF8キーを使って、1行ずつ実行してみましょう!
- Sub SampleForNext() にカーソルを合わせて、F8キーを押してみましょう。
- 黄色い矢印が出たら、1回ずつF8を押して進めていきます。

- i = 1 がセットされ、Cells(i, 1).Value = i でA1セルに「1」が入ります。

- Next i に到達すると、次のループに進むかどうかの判定が行われます。iが10未満であれば、また For に戻ります。
- そして最後、i = 10 のとき Next i を実行すると、今度は For に戻らず、ループの外に進みます。
このようにF8でステップ実行することで、For〜Next間で指定回数繰り返す様子が目に見えて分かりやすいですよね。
てもシンプルですが、「繰り返し処理ってこういうことか!」と動きと一緒に理解しましょう♪
2.For〜Nextでつまずきがちな落とし穴
For〜Next構文の基本形はとてもシンプルですが、特に初学者のうちは、正しく書いたつもりでもうまく動かずに戸惑ってしまうことがあります。
ここでは、特につまずきやすいポイントを3つ厳選して紹介します!
■「Next」がない、または変数を間違えている
For〜Next構文は、名前のとおり「For」から始まり「Next」で終えるのが基本です。
書き慣れないうちは Next をうっかり書き忘れたり、Next の後に間違った変数名を書いてしまうことがあります。
その場合、マクロが正しく動かず、構文エラーになってしまうため注意が必要です。
例えば:
For i = 1 To 10
Cells(i, 1).Value = i
このコードを実行しようとすると、エラーが出てしまいます。
また、「For i」 で定義したにも関わらず「Next j 」というように別の変数を書いてしまった場合も、エラーで処理が止まってしまいます。
特にコードをコピーして使い回しているときなどは、「ForとNextのペア」がきちんと揃っているかを確認してみてくださいね。
■カウンター変数を大きい数字から書いてしまう
For〜Next構文では、カウンター変数の始まりと終わりの数字を元にループ処理を実行しています。
例えば、次のようなコードを見てみましょう:
For i = 10 To 1
Cells(i, 1).Value = i
Next i
これは10から1までループするよう書かれていますが、残念ながら一度もループ処理が実行されないで進んでしまいます。
For〜Next構文では、カウンター変数が1ずつ「増える」前提で動くようになっています。
そのため、スタートが10でゴールが1という「減らす方向」の指定では、条件に合わずスルーされることになります。
しかし、処理を「大きい数字から小さい数字へ」と進めたい場面もありますよね。
その場合には、次のように「 Step -1 」を書き加える必要があります:
For i = 10 To 1 Step -1
Cells(i, 1).Value = i
Next i
このように書くことで、「iを1ずつ減らしながら繰り返す」動きになります。
Step については、またこの後の章で詳しく解説しますが、ここでは「逆方向に進めたいときは Step -1 を使うんだな」と覚えておいてください!
■ネストの中で同じ変数を使ってしまう
For〜Next構文は、ループの中にさらにループを入れる(ネストを書く)ことができます。
例えば、「表の行と列を両方まとめて処理したい」といった場合に便利です。
しかし、ネストを書くときに、同じカウンター変数を使ってしまうとトラブルのもとになるので注意が必要です!
For i = 1 To 3
For i = 1 To 5
Cells(i, 1).Value = i
Next i
Next i
このコードでは、外側と内側で同じ i を使っているため、処理中に混乱を起こしてしまいます。
内側のループが i の値を上書きしてしまい、思ったより早く終わったり、同じセルばかり処理されたりする原因になります。
そのため、ネストを書くときは、外側と内側で異なる変数名(たとえば i と j)を使うことが基本です:
For i = 1 To 3
For j = 1 To 5
Cells(i, j).Value = j
Next j
Next i
こうすることで、それぞれのループが独立して動作し、意図どおりの繰り返し処理が行えます!
補足:Nextの後ろに変数名を書くと読みやすい!
実は、Next の後に書かれている変数名は省略することが可能です。
例えば:
For i = 1 To 10
Cells(i, 1).Value = i
Next
Nextの後に「i」を書いていませんが、この状態でマクロを実行しても適切に処理がされます!
しかし、複雑な処理やネストされたループの中では、省略してしまうとどの For に対応する Next か分かりづらくなってしまうことがあります。
そのため、私としては例で毎回書いているように、Nextに対応する変数名を明示する習慣をおすすめします!
読み返すときの負担が減るので、ぜひ取り入れてみてくださいね。
3.Stepで繰り返しの動きを変える
ここまでの章では、「1から10まで」など、順番に進む繰り返し処理を中心に紹介してきました。
しかし実務では、「2つ飛ばしで処理したい」「10から1へと逆向きに進めたい」など、少しイレギュラーなパターンも意外と多く発生します。
そんなときに活躍するのが、Step という指定方法です。
この章では、Step の基本とよくある活用パターンを一緒に見ていきましょう!
■Stepの基本:増やし幅を変える
For〜Next構文では、特に指定しない場合は「1ずつ増える」のが基本の動きです。
たとえば i = 1 からスタートすれば、2、3…と1つずつ増えながら、指定した回数だけ繰り返されます。
この進み方を自由にコントロールしたいときに使うのが、Stepです。
Step のあとに数値を指定することで、ループのカウント方法を柔軟に変えることができます!
まずは2つずつ増やす例を見ていきましょう:
For i = 1 To 9 Step 2
Cells(i, 1).Value = i
Next i
この場合、i の値は「1 → 3 → 5 → 7 → 9」と2つずつ増えていきます。
「1行おきに処理したい」「奇数行だけを対象にしたい」といった場面にぴったりです。
さらに Step に指定する数値を変えれば、次のような繰り返しもできます:
- Step 3 → 1 → 4 → 7 → 10(3つずつ進む)
- Step 5 → 1 → 6 → 11 → …(5つずつ進む)
このように Step を使えば、「どれくらいの間隔で処理を繰り返すか」を自由に指定できます。
■カウント変数を減らしながら処理する
Step のもうひとつの使い方が、減らしながら処理することです。
例えば:
For i = 10 To 1 Step -1
Cells(i, 1).Value = i
Next i
このコードでは、i の値は「10 → 9 → 8 → … → 1」と1ずつ減っていきます。
Stepの後の数値を負の数にすることで、カウント変数を減らしながら処理していくという指示を書くことができます。
■実務でよくある使い道:行の削除
カウント変数を減らすループ処理は、行を削除する処理などで役立ちます!
たとえば、A列の1〜11行目に行番号を入れて、「1~10番目の行をすべて削除するマクロ」を考えてみましょう。
上から順に削除する場合:
For i = 1 To 10
Rows(i).Delete
Next i
このコードを実行すると、意外にも偶数行が削除されず残ってしまいます。

これは、削除のたびに次の行が1つ繰り上がってしまい、一部の行が飛ばされてしまうためです。
実際の動きを見たい場合は、F8キーでステップ実行して確認してください!
では、逆に下から順に削除するとどうでしょうか?:
For i = 10 To 1 Step -1
Rows(i).Delete
Next i
このコードでは、10行目から1行目に向かって削除していくため、削除によるズレが発生せず、すべての行を正しく削除することができます!

このように Step を使うと、ループの進み方を自由にコントロールできるようになります。
「増えるだけが繰り返しじゃない」ことをぜひ覚えておきましょう!
4. 実務で役立つFor〜Nextの応用例
これまでに、For〜Next構文の基本形や、Stepを使ったループの進め方を学んできました。
この章では、Excelマクロで「これは便利!」と感じる実務での活用例を3つピックアップして紹介します。
「どんな処理が自動化できるのか」「どこでFor〜Nextを使うと効果的なのか」をイメージできるようになりましょう!
■活用例①:複数のシートに同じ処理をまとめて適用する
Excelファイルを使っていると、「複数のシートに同じ処理をしたい!」という場面が出てきます。
例えば:
- すべての月次シートにタイトル行を追加したい
- 全支店分のシートに同じ入力チェックをかけたい
- 各シートのフォーマットを統一したい
こうした処理も、For〜Next構文を使えば、一気に自動化することができます!
ここでは、すべてのシートのA1セルに「月次レポート」と入力する例を紹介します。
Sub AddTitleToAllSheets()
Dim i As Integer
For i = 1 To Worksheets.Count
Worksheets(i).Range("A1").Value = "月次レポート"
Next i
End Sub
このコードでは、次のような仕組みを活かして、すべてのシートに処理を行っています:
- Worksheets.Count:ブック内のシート数を取得します。
- Worksheets(i):i番目のシートを指定します。
これを For i = 1 To Worksheets.Count で繰り返しているので、1枚目から最後のシートまで順番に、A1セルに「月次レポート」と入力していくという動きになります。
このような「全シートに同じ操作をしたい」というニーズは、例えば:
- 複数の部門/支店/月別データがシートで分かれている場合
- シートごとに同じ表が並んでいるファイルを管理している場合
に特によくあります。
一枚ずつ手作業で操作するのは大変ですが、For〜Nextを使えばほんの数行のコードで一括対応できるのが魅力ですね。
■活用例②:条件に一致した行を別シートに転記する
Excelでよくある作業に、「ある条件を満たすデータだけを抽出して、別の場所にコピーする」というものがあります。
例えば:
- B列に「OK」と書かれている行だけを別シートに転記したい
- エラーのある行をまとめて報告用に抽出したい
- 特定の商品の売上データだけを別シートに整理したい
こうした処理は、If文とFor〜Next構文の組み合わせで実現できます!
以下のマクロは、Sheet1のB列に「OK」と書かれている行だけを、Sheet2に転記する処理です:
Sub CopyOKRows()
Dim i As Integer
Dim destRow As Integer
destRow = 1
For i = 2 To 11
If Worksheets("Sheet1").Cells(i, 2).Value = "OK" Then
Worksheets("Sheet2").Rows(destRow).Value = Worksheets("Sheet1").Rows(i).Value
destRow = destRow + 1
End If
Next i
End Sub
このマクロの仕組みは、次のようになっています:
- i を使って、Sheet1の2〜11行目を1行ずつチェックする
- その行のB列に「OK」と書かれていたら、その行全体をSheet2にコピーする
- destRow は、貼り付け先の行番号を表す
→ 転記を行ったあとに destRow = destRow + 1 とすることで、次の転記はその次の行に貼り付けられるように定義している
これでSheet2には「条件に合った行」だけが上から順にムダなく転記されるようになっています。
このような「条件付きでの転記処理」は、次のようなシーンで役立ちます:
- データのフィルタ結果を別ファイルにまとめたいとき
- 顧客や商品カテゴリなどで抽出結果を整理したいとき
- 申請フォームやアンケートの内容を分類したいとき
このように、実務で頻繁に登場する定番のマクロ活用パターンなので、ぜひ使えるようにしてください!
■活用例③:ループの中にループを書く(ネスト処理)
表形式のデータを扱っていると、「行ごとかつ列ごとの処理を繰り返したい」というケースがあります。
そうした「2次元の表を処理する」ときに使えるのが、ループのネスト構造です。
次のマクロは、A1〜I9のセル範囲に「九九の答え」を埋めていく処理です:
Sub CreateMultiplicationTable()
Dim i As Integer
Dim j As Integer
For i = 1 To 9
For j = 1 To 9
Cells(i, j).Value = i * j
Next j
Next i
End Sub
このコードでは:
- 外側のループ(i)が「行」を、内側のループ(j)が「列」を表す
- Cells(i, j).Value = i * j によって、セルに「i × j」の計算結果が入力される
→ A1 には 1×1=1、B1 には 1×2=2、C1 には 1×3=3… と九九表が順に作られていく
この「九九表を作る」という例は、ループのネスト構造の仕組みがとても分かりやすく実感しやすいので、ぜひ試してみてください!
このようなネスト構造は、次のような場面で特に有効です:
- 表全体に一括で何かを入力/チェックしたいとき
- 行と列の両方で条件分岐や装飾をしたいとき
- マトリクス形式のデータを扱う帳票やレポートの自動生成
「1つの行の中で、さらに複数列に処理をかける」といった2段階の処理が必要なときには、ループを活用して書くようにしましょう。
■関数でできる処理をマクロで書く意味
今回紹介したような繰り返し処理の中には、「関数でもできそう」と思われるものもあるかもしれません。
例えば:
- 条件に合った行を取り出す
→フィルター関数やIF関数で代用可能 - 九九表を作る
→セルに数式を入れれば表示は可能
確かに、単発で処理するだけなら関数でも十分対応できます。
ただし、マクロで書くことには次のようなメリットがあります:
- 処理対象を自動で調整できる
(「10行分」などではなく、データの行数に応じて柔軟に対応) - 複数の処理をまとめて1回で実行できる
(いちいち関数をコピペしなくてもOK) - 大量データでも動作が軽い
(大量の関数でファイル読み込みが遅くなる、ということがない) - 壊れにくい
(誤って数式を消されたり上書きされたりしにくく、安全)
やりたいこと自体は関数でも実現できますが、それを確実に・安全に・業務として効率的に行いたいなら、マクロでの自動化がおすすめです。
関数は柔軟で便利な一方、重くなったり壊れたりするリスクもあるため、「再利用したい」「他人も触る」「大量データを扱う」といったビジネスの現場では、マクロの利用も検討してみてください!
5. まとめ:For〜Next構文で「繰り返しの自動化」を味方にしよう!
今回は、Excelマクロで繰り返し処理を行うための基本構文「For〜Next」について、基本の書き方から実務での活用例までを紹介してきました。
■For〜Next構文の基本をおさらい!
For〜Nextは、「何回処理を繰り返すか」をカウンター変数で指定し、その回数分だけ自動的に処理を進めていく構文です。
例えば:
- 1から10まで順番に処理したいとき:
For i = 1 To 10 - 奇数行だけ処理したいとき:
For i = 1 To 9 Step 2 - 逆方向に処理したいとき:
For i = 10 To 1 Step -1
このように、開始値・終了値・増減の幅(Step)を設定することで、繰り返しの範囲や進み方を柔軟にコントロールすることができます。
さらに、For〜Nextの中にもう一つFor〜Nextを入れる「ネスト」構造を使えば、行と列を同時に処理するような二次元の繰り返し処理も簡単に書けるようになります。
■For〜Next構文を書くときのポイント
スムーズに動くマクロを作るために、次の点を意識しておきましょう:
- Next の書き忘れや、Forと異なる変数名を Next に書いてしまうと構文エラーになります。
- 減らしながら処理する場合は、Step -1 の指定を忘れないようにしましょう。
- ネスト(ループの入れ子)を書くときは、同じ変数名を使わず i と j など分けて使うと混乱を防げます。
- Next i のように変数名を明記しておくと、複雑な処理でも対応関係が見えやすくなります。
- インデントやコメントでコードの構造を整理しておくと、後からの見直しや修正がしやすくなります。
マクロの中でもFor〜Nextは、繰り返し処理の要ともいえる存在です。
他の繰り返し処理の書き方も別の記事で紹介しますが、まずは基本形としてこの構文をマスターしてくださいね!
\ Excelマクロ制作も承っています /
各種クラウドソーシングサイトにて業務効率化ツールの作成・カスタマイズを承っております。
ご相談・お見積もりは無料ですので、まずはお気軽にご覧ください!