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

ExcelマクロVBAの基本と応用、エクセルVBAの初級・初心者向け解説
公開日:2013年5月以前 最終更新日: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と型宣言文字

・Const定数の基本 ・変数でも同じ事が出来るが・・・ ・ダブルクォーテーションについて ・型宣言文字 ・Constにデータ型を指定しない場合のデータ型 ・その他の定数 ・Const変数宣言のまとめ
第14回.文字の結合(&アンパサンド)と継続行(_アンダーバー)
あるセルの文字と、あるセルの文字をくっつけて、別のセルに表示する、よくある事例であり、頻繁に行われることです。A1セルに"abc" B1セルに"123" この時に、C1セルに"abc123"を入れるような場合のマクロVBAになります。
第15回.四則演算と注釈(コメント)
エクセルは表計算ソフトですから、計算が出来なくては話になりません。四則演算(加減剰余)は必須です。この四則演算で使う算術演算の演算子は、ワークシートの演算子と同じです。あわせて、注釈(コメント)の書き方も覚えましょう。
第16回.繰り返し処理(For Next)
第17回.繰り返し処理(Do Loop)
・Do~Loopの構文 ・条件式 ・Do Loop 例文 ・Exit Do ・Do~Loopのネスト(入れ子) ・最後に一言
第18回.最終行の取得(End,Rows.Count)
・エクセルVBAにおける最終行取得の必要性 ・.End(xlDown):Ctrl+↓ ・.End(xlUp):Ctrl+↑ ・Endプロパティの方向(↑↓←→)について ・セルの行数を取得するRowプロパティ ・Cells(Rows.Count, 1).End(xlUp).Rowを日本語に訳す ・EndプロパティがRangeオブジェクトを返す ・Endプロパティの問題点 ・最終行に関するサイト内のページ
第19回.総合練習問題1
・マクロVBA練習問題 ・シンキングタイム ・マクロVBA練習問題解答へ
第20回.条件分岐(IF)
・Ifステートメントの構文 ・IFステートメントの条件式 ・Ifステートメントの使用例文 ・Ifステートメントのネスト(入れ子) ・サイト内のIfステートメント参考ページ ・最後に
第21回.条件分岐(ElseIf)
前回のIFステートメントでは、真か偽の二択でした。今回は、もっと多くの分岐が必要な、Ifステートメントで多肢条件分岐の場合の書き方です。ステートメントとしては、Ifステートメントです。IfステートメントのElseIfの構文 If条件式1Then 条件式1が真の処理 [ElseIf条件式2Then 条件式2が真の処理…
第22回.条件分岐(Select Case)
・Select Caseステートメントの構文 ・Select Case の例文 ・Select Case の応用
第23回.メッセージボックス(MsgBox関数)
・MsgBox関数の構文 ・名前付き引数 ・MsgBox関数のbuttonsの定数 ・MsgBox関数の戻り値の定数 ・MsgBox関数の例文 ・MsgBoxの使い道


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

VBA10大躓きポイント(初心者が躓きやすいポイント)|VBA技術解説(2024-03-05)
テンキーのスクリーンキーボード作成|ユーザーフォーム入門(2024-02-26)
無効な前方参照か、コンパイルされていない種類への参照です。|エクセル雑感(2024-02-17)
初級脱出10問パック|VBA練習問題(2024-01-24)
累計を求める数式あれこれ|エクセル関数応用(2024-01-22)
複数の文字列を検索して置換するSUBSTITUTE|エクセル入門(2024-01-03)
いくつかの数式の計算中にリソース不足になりました。|エクセル雑感(2023-12-28)
VBAでクリップボードへ文字列を送信・取得する3つの方法|VBA技術解説(2023-12-07)
難しい数式とは何か?|エクセル雑感(2023-12-07)
スピらない スピル数式 スピらせる|エクセル雑感(2023-12-06)


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

1.最終行の取得(End,Rows.Count)|VBA入門
2.RangeとCellsの使い方|VBA入門
3.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門
4.繰り返し処理(For Next)|VBA入門
5.変数宣言のDimとデータ型|VBA入門
6.ブックを閉じる・保存(Close,Save,SaveAs)|VBA入門
7.並べ替え(Sort)|VBA入門
8.条件分岐(IF)|VBA入門
9.セルのクリア(Clear,ClearContents)|VBA入門
10.マクロとは?VBAとは?VBAでできること|VBA入門




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


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



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