反復処理forの使い方

かばくん

同じような処理を何回も行うとき、
1行ずつ書いていたら、すごい行数になってしまいました・・・

へびせんせい

そういうときは反復処理を行うといいです。
プログラミングをやっているとほぼ必ずでてくるでしょう。
反復処理はFor構文を使って行います。

Point!
反復処理(繰り返す)といえば、For文を使う

Forの基本構文1 添字型

VBAにおけるforの使い方

For文(添字型)の基本形

For 添字 = 初期値 To 最終値
  処理(True)
Next 添字

For基本形 サンプルコード

Sub for文()
  Dim i As Long
  
  For i = 1 To 10
    MsgBox ("10回表示されます")
  Next i
End Sub

添字についてですが、インデックスやループカウンタとも呼ばれます。
For文の処理を何回繰り返すのかをコントロールするためのものです。
上のコードのように、添字(インデックス)の初期値と最終値を決めると、その中で添字が1ずつ増加して最終値に到達するまで処理を繰り返します。
添字(インデックス)は整数型の変数で定義しておく必要があり、その名前は何でも良いのですが、添字として使う変数はijが使われるのが一般的です。

*Nextの後の添字は省略可能です

なぜiが使われるようになったのか?
インデックス(index)の頭文字の i をとって使われるようになったというのが有力
そして、Forの中にさらにForを使うときは、i の次の j や k が使われる

また、次のように、処理の中に添字を使うこともできます。

For処理中に添え字を使う サンプルコード

Sub for文2()
  Dim i As Long
  
  For i = 1 To 10
    Cells(i, 2).Value = i
  Next i
End Sub

次のような動作となります。

i=1のとき、Cells(1, 2) に1の値を代入する
i=2のとき、Cells(2, 2) に2の値を代入する
i=3のとき、Cells(3, 2) に3の値を代入する
・・・
i=10のとき、Cells(10, 2) に10の値を代入する

となって、Forの処理が終了します。
結果は、B列の1から10行目に1から10の値が入ることになります。

Point!
For文を使って、Cellsを指定するのは超重要!

For文の入れ子(ネスト)で使う

For文をネスト構造で使うこともよくあります。
どういう流れで動作するかを、しっかり理解しましょう。

Forネスト構造 サンプルコード

Sub for文3()
  Dim i, j As Long
  
  For i = 1 To 10
    For j = 1 To 10
      Cells(i, j).Value = i * j
    Next j
  Next i
End Sub

次のような動作となります。

i=1のとき、
  j=1となり、Cells(1, 1) に1*1の値を代入する
  j=2となり、Cells(1, 2) に1*2の値を代入する
  j=3となり、Cells(1, 3) に1*3の値を代入する
  ・・・
  j=10となり、Cells(1, 10) に1*10の値を代入する
i=2のとき、
  j=1となり、Cells(2, 1) に2*1の値を代入する
  j=2となり、Cells(2, 2) に2*2の値を代入する
  j=3となり、Cells(2, 3) に2*3の値を代入する
  ・・・
  j=10となり、Cells(2, 10) に2*10の値を代入する
・・・
i=10のとき、
  j=1となり、Cells(10, 1) に10*1の値を代入する
  j=2となり、Cells(10, 2) に10*2の値を代入する
  j=3となり、Cells(10, 3) に10*3の値を代入する
  ・・・
  j=10となり、Cells(10, 10) に10*10の値を代入する

となって、Forの処理が終了します。

Point!
i と j がどう更新されていくかを、把握しよう!

Stepを使って、添字の増加量を変える

あまり使うことはないのですが、添字の1ずつ増加を2ずつや3ずつといったように変更することができます。

For 添字 = 初期値 To 最終値 Step 数値
  処理(True)
Next 添字

Stepを使ったFor サンプルコード

Sub for文4()
  Dim i As Long
  
  For i = 1 To 10 Step 2
    MsgBox ("5回表示されます")
  Next i
End Sub

Stepのあとの数値ぶんiの値が増えるので、i = 1, 3, 5, 7, 9となり、5回処理が動作します。
もし、Stepが3ならどうでしょうか?
i = 1, 4, 7, 10となり、4回処理が動作することになります。最終値が入るか入らないかに気をつけましょう。

Forの基本構文2 For Each型

VBAにおけるforの使い方

For文(For Each型)の基本形

For Each 要素 In グループ
  処理(True)
Next 要素

For Each型では、グループ(コレクションや配列)の各要素に対して繰り返し処理を行うことができます。
要素については、オブジェクト型かVariant型の変数しか指定できません。
添字型と異なり、要素の数だけ自動的に処理が行われるので、上手く使うと便利ですが、扱い方が難しいのも特徴です。

ForEach基本形 サンプルコード

Sub for文5()
  Dim myrange As Range
  
  For Each myrange In Range("A1:A5")
    myrange.Value = "For Each文"
  Next myrange
End Sub

正直、For Each文はオブジェクト型や配列をしっかり理解した後に使えればよいです。
まずは、上記の添字を使ったFor文を覚えましょう。


For文についての練習問題

へびせんせい

A1セルに1、A2セルに2、A3セルに3・・・と数字を入力せよ。
数字は30まで到達したところで、再び、1から順に30まで入力されるものとし、これを12回繰り返せ。
つまり、A360セルに30が入力されて処理が終わる。
*A列にカレンダーの日付(29や31は考えなくてよい)が入力されるようなイメージである

解答はコチラ

Excelを開いて、コードを確認してください

Download