ExcelマクロVBA入門 | 第16回.繰り返し処理(For Next) | Excelマクロの基礎と応用、エクセルVBAの入門・初級・初心者向け解説



最終更新日:2018-06-14

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

VBAのFor Nextは、同じ処理を繰り返し行うためのVBA構文です。

VBAで繰り返し処理をする方法は何通りかありますが、

最も頻繁に使われていて、最も簡単便利であり、

まず最初に覚えるべき繰り返し処理のVBA構文がFor Nextになります。



For Nextは、繰り返し処理をするためのステートメントで、
同じ処理を複数回繰り返したい場合に使います、
マクロで処理を自動化する為の必須記述になります。

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

繰り返し処理はループ処理とも呼ばれます。
マクロでのループ処理の記述は何通りかありますが、
まず最初に覚えるべきものが、今回説明する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 が加算されます。
statements 省略可能です。
ループ内で実行される一連のステートメントで、For と Next の間に記述します。
ここに記述したステートメントは、For...Next ステートメントで指定した回数だけ実行されます。

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

詳しく、説明します。

まず、ステートメントとは、マクロの挙動を制御する構文、命令文です。

では、上記構文の余分なものを消して、日本語に直してみましょう。

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

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

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



例文で理解を深めましょう。

A1セルからA10セルに、1を入れる場合です。

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

変数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 '値列のi行目のセルに1を入れる
  Next i        'Forの範囲はここまで
End Sub



ステップ イン実行で目で見て確認しましょう。
マクロを1行ずつ実行する方法を、ステップ インと呼びます。
コーディングとデバッグ
デバッグの基礎





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



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





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



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



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


では、1行目、3行目、5行目・・・
このように、
1行置きに処理する場合

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

と指定します。

Step 2

これが1行置きの指定です、iが2ずつ増えていきます
つまり、これを書かない時は、

Step 1

と言う事です。
このStepは、マイナス数値も指定できます

Step -1

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

マクロ再入門:第20回.全てのシートに同じ事をする(For〜Worksheets.Count)



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

実行して、確認して下さい。

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

ネストは、概ね3段階までにしましょう。



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

マクロ再入門





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

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

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

For Next の使い方いろいろ|VBA技術解説(6月14日)
VBAを定型文で覚えよう|ExcelマクロVBA技術解説(3月26日)
VBAスタンダード試験対策まとめ|MOS VBAエキスパート対策(3月16日)
ユーザーフォームとメニューの操作|MOS VBAエキスパート対策(3月14日)
ファイルの操作|MOS VBAエキスパート対策(3月14日)
ユーザーフォームの各種イベント|Excelユーザーフォーム(3月13日)
レジストリの操作|MOS VBAエキスパート対策(3月12日)
変数と配列|MOS VBAエキスパート対策(3月12日)
Colorプロパティの設定値一覧|VBA技術解説(3月12日)
APIとOLEオートメーション|MOS VBAエキスパート対策(3月11日)

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

1.最終行の取得(End,Rows.Count)|VBA入門
2.変数とデータ型(Dim)|ExcelマクロVBA入門
3.マクロって何?VBAって何?|ExcelマクロVBA入門
4.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門
5.Range以外の指定方法(Cells,Rows,Columns)|VBA入門
6.RangeとCellsの使い方|ExcelマクロVBA入門
7.とにかく書いて見よう(Sub,End Sub)|VBA入門
8.まずはマクロVBAを使う準備|ExcelマクロVBA入門
9.繰り返し処理(For Next)|ExcelマクロVBA入門
10.マクロはどこに書くの(VBEの起動)|VBA入門



  • >
  • >
  • >
  • 繰り返し処理(For Next)

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


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





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

    本文下部へ

    ↑ PAGE TOP