本ページでは、VBAで繰り返し処理を行うForステートメントについて解説します。
Forステートメントには、大きく2種類の使い方が存在します。1つが「For Each」 。もう1つが「For Next」。このページでは、VBA初心者向けにForの使い方を0から解説していきます。
- Forステートメントの意味と使い方
- For Next / For Each の処理内容と使い分け
VBAを用いてコーディングしていく上で、For文の理解は必要不可欠です。サンプルコードやイメージ画像付きで分かりやすく解説していきますので、是非最後までご覧ください。
For Next
"For Next" は指定した回数だけ処理を繰り返したい場合に用います。
For (インデックス) = 初期値 To 最終値
`繰り返し処理
Next (インデックス)
インデックスというのは変数のことです。この変数が、最終値になるまで同じ処理が繰り返されます。
For i = 1 To 10 Cells(i, i) = i Next i
上記のコードでは、変数「i」が最終値「10」になるまで処理「Cells(i, i) = i」を繰り返します。
Nextまで来ると、変数「i」の値が1つインクリメント(値が1増加)される仕組みです。
- Forで始まりNextで閉じる
- ForとNextの間に繰り返しのロジックを記述する
- 変数「i」は繰り返し処理が終了するごとに1ずつ増加する(Nextでインクリメントされる)
- 変数「i」はToの後「最終値」になるまで増加し続ける
For文においては基本的に変数の名称は「 i 」にするのが一般的です。「 i 」は、「index」の頭文字(所説あり?)です。
上記、ポイントを押さえたうえで簡単なサンプルコードを確認してみましょう。
サンプルコード:For Next
Sub testForNext() Dim i As Integer For i = 1 To 10 Cells(i, i) = i Next i End Sub
3行目
⇒変数 i を定義
4行目(繰り返し回数の指定)
⇒10回繰り返すように指定(※変数「 i 」が1から始まり10になるまで繰り返す)
5行目(繰り返し処理)
⇒セルに値を入力(A1⇒1、B2⇒2、C3⇒3・・・・)
6行目
⇒変数 i の値を1増加(インクリメント)
結果はこちら。Toの後に指定したとおりこの処理は10回繰り返されています。
これで基本的な理解はOKです。ただし、For文には様々なオプションが存在しますので、ここからの内容も合わせてご確認下さい。
Stepオプション(For Next)
先ほど、For文のポイントとして「変数(i)はToの後に記述した値になるまで増加し続ける」と解説しました。
実は、この増減方法は指定可能です。例えば、初期値から順に1減少させていったり、2段飛ばしで実行したりすることができるのです。
For (インデックス) = 初期値 To 最終値 Step 値
`繰り返し処理
Next (インデックス)
Stepオプション利用することで、赤字で記載された数字分変数 i が増減していきます。
例えば、「Step 2」とした場合、変数は2ずつ増加していきます。逆に「Step -1」とすれば1ずつ減少させることができます。
構文の形だけを見ていてもイメージがわきづらいかと思いますので、サンプルコードで解説していきます。
サンプルコード:Stepオプション(For Next)
Sub test00001() Dim i As Integer Dim Odd As Integer For i = 1 To 10 Step 2 Odd = Odd + i `Oddに変数「i」の値を加算する Next i Debug.Print Odd `Oddの値を表示 End Sub
このサンプルコードでは、変数 i は1から10に向かって2ずつ増えてきます。(繰り返しの説明となりますが、この「2」というのはStepオプションで指定した値です。)
変数 i の値は、1から始まり、3⇒5⇒7⇒9と順に増えていきます。この際、変数 i は10を超えることはありませんので、このコードを実行すると変数Oddには1から10までの奇数値の合計「25」が格納されます。
Debug.Print で変数Oddの結果を確認すると、以下の通り25が格納されていることが分かります。
Stepオプションにマイナスの値を指定することも可能です。この場合、変数 i の値は処理数に応じて減少していきます。
For Each
"For Each" はコレクションの全ての要素に対して処理を行いたい場合に用います。
For Each 変数 In (コレクション)
`繰り返し処理
Next
For Eachを利用すると、指定したコレクション全てに同じ処理を行っていくことができます。イメージしやすいように、こちらも早速サンプルコードを確認していきましょう。
サンプルコード:For Each
Sub testForEach() Dim r1 As Range For Each r1 In Range("A2:C4") r1.Value = "Hello" Next End Sub
4行目
⇒繰り返しの処理を「セル(A2:C4)」対して行う指定
5行目
⇒セルに「Hello」と入力
For Eachの直後に指定した変数の値を、指定したコレクションの要素すべてに適用していくようなイメージです。
結果がこちらです。A2~C4セルに対して、”Hello” という値が入力されました。
このように、For Eachは指定した範囲のみの繰り返し処理になります。
For Next / For Each については、Do~Loopステートメントと比較して無限ループに陥る可能性が非常に低いため使いやすいイメージです。
0からプログラミングを学びたい方は
プログラミングをより実践的に学びたい―。実際にコーディングをしながら学びたい―。独学に限界を感じている―。
そんな方には、無料体験/オンライン完結もあるプログラミングスクールで学ぶのがおすすめです。都度検索しながら知識を補完していくのではなく、1から体系立てて学ぶことで短時間・かつ効率的にスキルハックすることが可能です。
おすすめのプログラミングスクールをこちらのページで解説しておりますので、是非合わせてご覧ください。