VBA入門
繰り返し処理(For Next)

ExcelマクロVBAの基本と応用、エクセルVBAの初級・初心者向け解説
最終更新日:2021-08-21

第16回.繰り返し処理(For Next)


VBAのFor Nextは、同じ処理を繰り返し行うためのVBA構文です。
繰り返し処理はループ処理とも呼ばれます。


マクロでのループ処理の記述は何通りかありますが、まず最初に覚えるべきものが、今回説明するFor Nextです。
For Nextは、繰り返し処理をするためのステートメントで、マクロVBAで処理を自動化する為の必須記述になります。

エクセルの表とは、横に項目が並び、縦にデータが入っている事が多いわけですが、
この表の全データを、For Nextを使って短い記述で繰り返し処理できるようになります。

それでは、For Nextの基本的な構文から確認していきましょう。


For Next ステートメント

指定した回数だけ、一連のステートメントを繰り返すフロー制御ステートメントです。

構文

For counter = start To end [Step step]
  [statements]
  [Exit For]
  [statements]

  
Next [counter]

counter 必ず指定します。
カウンタに使う数値変数を指定します。
配列変数およびブール型 (Boolean) に含まれる変数は指定できません。
start 必ず指定します。
引数 counter の初期値を指定します。
end 必ず指定します。
引数 counter の最終値を指定します。
step 省略可能です。
ループを繰り返すごとに引数 counter に加算される値を指定します。
引数stepを省略すると、ループを繰り返すごとに引数counterには1が加算されます。
つまり省略時は、Step 1 を指定していることになります。
statements 省略可能です。
ループ内で実行される一連のステートメントで、For と Next の間に記述します。
ここに記述したステートメントは、For...Next ステートメントで指定した回数だけ実行されます。

これは、Excelのヘルプからの抜粋です。
これを読んでわかるなら苦労しないし、このサイトは見ないでしょうから、
詳しく、説明します。

まず、ステートメントとは、マクロの挙動を制御する構文、命令文です。
・キーワード ・予約語 ・演算子 ・識別子 ・ステートメント ・VBA用語の最後に
では、上記構文の余分なものを消して、日本語に直してみましょう。

For 変数 = 開始数値 To 終了数値
  ・・・処理・・・
Next

つまり、変数開始数値から終了数値になるまで繰り返すということです。

※Nextの後ろに書くカウンター変数
Next [カウンター変数]
このカウンター変数は、省略可能です。
見栄えだけの問題と考えてもらって構いません。
書いても書かなくても問題ありません。
当サイト内でも、書いてあったりなかったりしていますが、特に意図はありません。


For Next 例文

例文で理解を深めましょう。
A1セルからA10セルに、1を入れる場合です。

Sub 練習1()
  Dim i
  For i = 1 To 10
    Cells(i, 1) = 1
  Next i
End Sub
※.Valueは省略しています。

変数iが、1から10まで、自動的にアップしていきます
つまり、
Cells(1, 1) = 1
Cells(2, 1) = 1
・・・
Cells(10, 1) = 1
このように、順に変数i1~10で実行してくれます。
1行ずつ説明を書くと

Sub 練習1()
  Dim i        '変数iを宣言


  For i = 1 To 10   '変数iを1から10まで1ずつカウントアップ
    Cells(i, 1) = 1 'A列のi行目のセルに1を入れる
  Next i        'Forの範囲はここまで
End Sub

※.Valueは省略しています。


For Next をステップ イン実行で目で見て確認しましょう。

マクロを1行ずつ実行する方法を、ステップ インと呼びます。
VBEの使い方:デバッグ
・実行、中断、リセット(停止) ・ステップ実行 ・呼び出し履歴 ・VBA実行途中で変数の状態を確認 ・Debug.Print ・Debug.Assert ・デバッグの最後に
コーディングとデバッグ
・効率的なコーディング ・デバッグ ・イミディエイト ウインドウ(Ctrl+G) ・ローカル ウインドウ ・「ツール」→「オプション」 ・陥りやすい間違い、よくやってしまう間違い ・サイト内の関連ページ
デバッグの基礎
・【ここでのポイント】 ・デバッグとは ・論理エラーと文法エラー ・イミディエイトウィンドウ ・ブレークポイント ・ステップ実行 ・その他のデバッグ用のウィンドウ ・【業務改善の実務】 ・【本サイト内の関連ページ】 ・VBAエキスパート公式テキスト

VBA Excel 画像

VBA Excel 画像

SubからEnd Subの範囲内に入力カーソルがある状態で、
ステップ イン実行、F8を押します。

VBA Excel 画像

黄色い行は、これからこの行を実行するという事です。
F8を押すごとに、黄色い行が進んでいきます。

VBA Excel 画像

VBA Excel 画像

マウスカーソルを変数の上に乗せると、変数の値がポップアップ表示されます。

VBA Excel 画像

F8を次々に押しながら、
その時々のシートの状態を確認してください。

VBA Excel 画像

変数の変化と、シートの変化を実際に見て確認してください。


1行置きに処理する場合

1行目、3行目、5行目・・・
このように、1行置きに処理する場合のFor Nextの書き方です。

Sub 練習2()
  Dim i
  For i = 1 To 10 Step 2
    Cells(i, 1) = 1
  Next i
End Sub

このように、Stepを書き加えます。

Step 2
これが1行置きの指定です。

iが2ずつ増えていきます
つまり、これを書かない時は、
Step 1
と言う事です。

このStepは、マイナス数値も指定できます
Step -1
とすれば、iは1ずつ減っていきます。
セルの行を下から処理したい場合や、シートを後ろから処理したい場合です。
これは非常に多くの場合に使用されます。

マクロ再入門:第20回.全てのシートに同じ事をする(For~Worksheets.Count)
・シートの指定方法 ・全シートの「印刷の向き」を「横」に設定します。 ・シート名に"横"と入っているシートだけ「印刷の向き」を「横」に設定します ・シート名に"削除"と入っていたらシートを削除する ・For Eachについて ・ExcelマクロVBA入門の対応ページ


Exit For

Exit Forは、For~Nextのループを抜けます。

指定の終了数値に達する前に、
For~Nextのループ処理を終了したい場合に使用します。

通常のFor~Nextは指定回数繰り返す為に使うので、Exit Forを使う事は少ないのですが、
特定の条件になった場合は、指定回数の処理を完了する前にループを抜けたい場合に使用します。

Sub 練習3()
  Dim i
  For i = 1 To 10
    If Cells(i, 1) <> "" Then
      Exit For
    End If
    Cells(i, 1) = 1
  Next
End Sub

10行目まで繰り返したいが、
A列に既に値が入っていたら、そこで終了するという処理になります。


For~Nextのネスト(入れ子)

縦10行、横10列に1を入れる場合です。

Sub 練習3()
  Dim i, j
  For i = 1 To 10
    For j = 1 To 10
      Cells(i, j) = 1
    Next j
  Next i
End Sub

F8ステップインで実行して、内側のForから外側のForに移る様子を確認して下さい。

For~Nextのネスト(入れ子)は何段階でも書けますが、
あまり多くのネストをしてしまうと可読性(読みやすさ)が低下します。

ネストは、概ね3段階までが推奨されています。


最後に一言

繰り返し処理はプログラミングの基本中の基本です。
これが曖昧では、実務でマクロVBAを使う事は出来ません。
以下の記事も参考に、ぜひしっかり習得してください。

マクロ再入門
第5回.同じ計算を行数分繰り返す(For~Next)
・練習用のデータ作成について ・1行だけの計算をする場合は ・VBAの変数とは ・変数を使って行をずらしていく ・デバッグ:ステップ イン F8 ・変数を使った繰り返し処理 ・For~Nextの補足説明 ・VBAコードの書き方について ・ExcelマクロVBA入門の対応ページ
第6回.表の先頭から最終行まで繰り返す(ForとEnd(xup).Row)
・表の最終行を取得する ・表の最終行まで繰り返す ・VBAの文法を覚える必要があるか ・ExcelマクロVBA入門等の対応ページ
ForとIfのネストこそがVBAの要点
・第1に考える事・・・大外の繰り返しを作成 ・第2に考える事・・・1支店だけを作成 ・第3に考える事・・・昨対比の判定 ・第4に考える事・・・3支店の繰り返し ・第5に考える事・・・3支店の繰り返しを全体の中に組み込む ・最後に考える事・・・最後の仕上げ ・目指すべきVBAの書き順・・・VBAが上達したら
For Next の使い方いろいろ
VBAの繰り返し処理としては、ForNextまたはDoLoop この二つを最初に学んだのではないでしょうか。プログラムにおける繰り返し処理は、基本中の基本です。特に使用頻度の高いForNextを重点的に学んでいることと思いますが、書き方、使い方は、いくつかのパターンがあります。




同じテーマ「マクロVBA入門」の記事

第13回.定数宣言のConstと型宣言文字
第14回.文字の結合(&アンパサンド)と継続行(_アンダーバー)
第15回.四則演算と注釈(コメント)
第16回.繰り返し処理(For Next)
第17回.繰り返し処理(Do Loop)
第18回.最終行の取得(End,Rows.Count)
第19回.総合練習問題1
第20回.条件分岐(IF)
第21回.条件分岐(ElseIf)
第22回.条件分岐(Select Case)
第23回.メッセージボックス(MsgBox関数)


新着記事NEW ・・・新着記事一覧を見る

構成比を合計しても100%にならないと言われた…|ツイッター出題回答 (2022-09-01)
一覧から複数条件(部分一致、範囲)に合致するデータを抽出する|ツイッター出題回答 (2022-08-30)
縦横スピルしないXLOOKUP代替(MATCH+INDEX,FILTER,CHOOSEROWS)|エクセル入門(2022-08-27)
IF関数の論理式で比較演算子を省略したCOUNT系関数を書くのは|ツイッター出題回答 (2022-08-23)
LAMBDA以降の新関数の使用例|エクセル入門(2022-08-22)
数珠順列(配置に条件付き)を全て出力する|ツイッター出題回答 (2022-08-20)
日付時刻のマイナス表示に対応する方法|ツイッター出題回答 (2022-08-17)
LAMBDA以降の新関数について|エクセル入門(2022-08-16)
条件付きの最大値と中央値("A"が2文字の条件)|ツイッター出題回答 (2022-08-14)
VBAマクロと操作対象データの分離について|ツイッター出題回答 (2022-08-11)


アクセスランキング ・・・ ランキング一覧を見る

1.最終行の取得(End,Rows.Count)|VBA入門
2.RangeとCellsの使い方|VBA入門
3.変数宣言のDimとデータ型|VBA入門
4.繰り返し処理(For Next)|VBA入門
5.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門
6.Excelショートカットキー一覧|Excelリファレンス
7.並べ替え(Sort)|VBA入門
8.マクロって何?VBAって何?|VBA入門
9.Range以外の指定方法(Cells,Rows,Columns)|VBA入門
10.エクセルVBAでのシート指定方法|VBA技術解説




このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。


記述には細心の注意をしたつもりですが、
間違いやご指摘がありましたら、「お問い合わせ」からお知らせいただけると幸いです。
掲載のVBAコードは動作を保証するものではなく、あくまでVBA学習のサンプルとして掲載しています。
掲載のVBAコードは自己責任でご使用ください。万一データ破損等の損害が発生しても責任は負いません。



このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。
本文下部へ