ExcelVBAでは同じ事を繰り返し実行するプログラミングは頻繁に出てきます。そのため、ExcelVBAを使いこなすためにはFor~Next文を確実に理解しておく必要があります。このFor~Next文の使い方について紹介します。
構文
記述方法は以下の様になります。
For [変数]= [初期値]to[最終値]
[処理内容]
Next
[説明]:
実行回数の決まった繰返処理(ループ処理)を行います。
[変数] | [初期値]~[最終値]までの値を順次セットします。 |
[初期値] | 開始する最初の値を記述します。 |
[最終値] | 終了する最後の値を記述します。 |
[処理内容] | 繰返処理の中で実行する処理を記述します。 |
使い方
使い方について具体的に説明します。
基本的な使い方
基本的な使い方について説明します。
[プログラミング例]:
Sub サンプル()
'↓処理①
Dim 番号 As Double
'↓処理②
For 番号 = 1 To 3
MsgBox 番号
Next
End Sub
処理の流れは以下の通りとなります。
[処理①]:変数定義
Dimによる変数定義となります。
[処理②]:For~Next文の記述
変数:番号に1から3の値を順次セットし、セット毎にMsgBoxで値を表示していきます。
---------------------------------
1回目の処理では1が変数:番号にセットされるため「1」が表示されます。
---------------------------------
2回目の処理では2が変数:番号にセットされるため「2」が表示されます。
---------------------------------
3回目の処理では3が変数:番号にセットされるため「3」が表示されます。
---------------------------------
※上記のプログラミング例は、VBE(VBA記述画面)に記述しないと実行ができません。VBEの開き方についてはこちらを参考にして下さい。
[実行例]:
①<実行>ボタンには上記のプログラミング例のプログラムが登録されています。この<実行>ボタンをクリックします。(※ボタンの作り方やボタンにプログラムを割り当てるにはこちらを参考にして下さい。)
②最初の処理結果は以下の様に表示されます。MsgBoxで「1」が表示されます。
③次の処理結果は以下の様に表示されます。MsgBoxで「2」が表示されます。
④最後の処理結果は以下の様に表示されます。MsgBoxで「3」が表示されます。
[サンプル]:
上記で説明したファイルをダウンロードできます。ご自由にお使い下さい。
基本的な使い方の説明は以上です。
Stepを用いた使い方
Stepを用いた変数の増減値を変更する方法について説明します。
[プログラミング例①]:
Sub サンプル()
'↓処理①
Dim 番号 As Double
'↓処理②
For 番号 = 1 To 5 Step 2
MsgBox 番号
Next
End Sub
処理の流れは以下の通りとなります。
[処理①]:変数定義
Dimによる変数定義となります。
[処理②]:Stepを用いたFor~Next文の記述(足し算方式)
Stepは[初期値]から[最終値]までの間を指定した数だけ飛ばして処理を実行します。よって、通常は変数:番号に1から5の値を順次セットし、セット毎に MsgBoxで表示していくのですが、今回のケースではStepを使用して2つずつ飛ばした値を表示させます。
---------------------------------
1回目の処理では1が変数:番号にセットされるため「1」が表示されます。
---------------------------------
2回目の処理では2つ飛ばした1+2=3が変数:番号にセットされるため「3」が表示されます。
---------------------------------
3回目の処理でも2つ飛ばした3+2=5が変数:番号にセットされるため「5」が表示されます。
---------------------------------
※上記のプログラミング例は、VBE(VBA記述画面)に記述しないと実行ができません。VBEの開き方についてはこちらを参考にして下さい。
[実行例①]:
①<実行>ボタンには上記のプログラミング例のプログラムが登録されています。この<実行>ボタンをクリックします。(※ボタンの作り方やボタンにプログラムを割り当てるにはこちらを参考にして下さい。)
②最初の処理結果は以下の様に表示されます。MsgBoxで「1」が表示されます。
③次の処理結果は以下の様に表示されます。MsgBoxで「3」が表示されます。
④最後の処理結果は以下の様に表示されます。MsgBoxで「5」が表示されます。
[サンプル]:
上記で説明したファイルをダウンロードできます。ご自由にお使い下さい。
Stepを用いたプログラミング例①の説明は以上です。
[プログラミング例②]:
Sub サンプル()
'↓処理①
Dim 番号 As Double
'↓処理②
For 番号 = 3 To 1 Step -1
MsgBox 番号
Next
End Sub
処理の流れは以下の通りとなります。
[処理①]:変数定義
Dimによる変数定義となります。
[処理②]:Stepを用いたFor~Next文の記述(引き算方式)
Stepが記述された2例目となります。Stepは[初期値]から[最終値]までの間を指定された数だけ飛ばして処理を実行しますが、[初期値]>[最終値]の処理を回す場合はStepにマイナス値を指定します。今回は変数:番号に3から1の値を順次セットして MsgBoxで表示させるため、Stepには-1の値を指定します。
---------------------------------
1回目の処理では3が変数:番号にセットされるため「3」が表示されます。
---------------------------------
2回目の処理では-1つ飛ばした3-1=2が変数:番号にセットされるため「2」が表示されます。
---------------------------------
3回目の処理でも-1つ飛ばした2-1=1が変数:番号にセットされるため「1」が表示されます。
---------------------------------
※上記のプログラミング例は、VBE(VBA記述画面)に記述しないと実行ができません。VBEの開き方についてはこちらを参考にして下さい。
[実行例②]:
①<実行>ボタンには上記のプログラミング例のプログラムが登録されています。この<実行>ボタンをクリックします。(※ボタンの作り方やボタンにプログラムを割り当てるにはこちらを参考にして下さい。)
②最初の処理結果は以下の様に表示されます。MsgBoxで「3」が表示されます。
③次の処理結果は以下の様に表示されます。MsgBoxで「2」が表示されます。
④最後の処理結果は以下の様に表示されます。MsgBoxで「1」が表示されます。
[サンプル]:
上記で説明したファイルをダウンロードできます。ご自由にお使い下さい。
Stepを用いたプログラミング例②の説明は以上です。
Exitを用いた使い方
Exitを用いた処理の強制終了の方法について説明します。For~Next文の中にExit Forを記述すると、繰り返し処理を途中で中断し、処理を強制的に終了させます。
[プログラミング例]:
Sub サンプル()
'↓処理①
Dim 番号 As Double
'↓処理②
For 番号 = 1 To 3
If (番号 = 2) Then
Exit For
End If
MsgBox 番号
Next
'↓処理③
MsgBox "処理が終わりました。"
End Sub
処理の流れは以下の通りとなります。
[処理①]:変数定義
Dimによる変数定義となります。
[処理②]:Exitを用いたFor~Next文の強制終了方法
Exitは処理を途中で強制的に抜ける記述となります。今回は変数:番号に1から3の値を順次セットし、セット毎に MsgBoxで値を表示させますが、IF文による条件分岐で変数:番号の値が「2」になった場合には強制的にFor~Next文を抜けます。抜けた後は[処理③]が実行されます。
---------------------------------
1回目の処理では1が変数:番号にセットされるため「1」が表示されます。
---------------------------------
2回目の処理では2が変数:番号にセットされますが、IF文の分岐条件に一致する事からループ処理を抜け[処理③]が実行されます。
---------------------------------
[処理③]:処理終了メッセージ
MsgBoxで「処理が終わりました。」を表示させます。
※上記のプログラミング例は、VBE(VBA記述画面)に記述しないと実行ができません。VBEの開き方についてはこちらを参考にして下さい。
[実行例]:
①<実行>ボタンには上記のプログラミング例のプログラムが登録されています。この<実行>ボタンをクリックします。(※ボタンの作り方やボタンにプログラムを割り当てるにはこちらを参考にして下さい。)
②最初の処理結果は以下の様に表示されます。MsgBoxで「1」が表示されます。
③次の処理結果は以下の様に表示されます。ExitによりFor~Next文を抜けるため、MsgBoxで「処理が終わりました。」が表示されます。
[サンプル]:
上記で説明したファイルをダウンロードできます。ご自由にお使い下さい。
Exitを用いた使い方についての説明は以上です。
GoToを用いた使い方
GoToを用いた処理の読み飛ばし方法について説明します。For~Next文の中にGoToを記述すると、処理を読み飛ばして次の処理に移る事ができます。
[プログラミング例]:
Sub サンプル()
'↓処理①
Dim 番号 As Double
'↓処理②
For 番号 = 1 To 3
If (番号 = 2) Then
GoTo 次の処理
Else
MsgBox 番号
End If
次の処理:
MsgBox "次の処理に移ります。"
Next
End Sub
処理の流れは以下の通りとなります。
[処理①]:変数定義
Dimによる変数定義となります。
[処理②]:GoToを用いたFor~Next文の処理の読み飛ばし方法
GoToは指定した場所に処理を飛ばす記述となります。今回は変数:番号に1から3の値を順次セットしMsgBoxで値を表示させますが、IF文による条件で変数:番号の値が2の場合は処理を読み飛ばし、次の処理に移ります。
---------------------------------
1回目の処理では1が変数:番号にセットされるため「1」が表示された後に「次の処理に移ります。」が表示されます。
---------------------------------
2回目の処理では2が変数:番号にセットされますが、IF文の分岐条件に一致する事からGoTo処理が実行され「次の処理に移ります。」のみが表示されます。
---------------------------------
3回目の処理では3が変数:番号にセットされるため 「3」が表示された後に「次の処理に移ります。」が表示されます。これにより、2回目の処理が読み飛ばされた事がわかります。
---------------------------------
※上記のプログラミング例は、VBE(VBA記述画面)に記述しないと実行ができません。VBEの開き方についてはこちらを参考にして下さい。
[実行例]:
①<実行>ボタンには上記のプログラミング例のプログラムが登録されています。この<実行>ボタンをクリックします。(※ボタンの作り方やボタンにプログラムを割り当てるにはこちらを参考にして下さい。)
②最初の処理結果は以下の様に表示されます。MsgBoxで「1」が表示された後に「次の処理に移ります。」が表示されます。
③次に処理結果は以下の様に表示されます。条件によりGoTo文で読み飛ばしされたため、MsgBoxで「次の処理に移ります。」が表示されます。
④最後に処理結果は以下の様に表示されます。MsgBoxで「3」が表示された後に「次の処理に移ります。」が表示されます。
[サンプル]:
上記で説明したファイルをダウンロードできます。ご自由にお使い下さい。
GoToを用いた使い方についての説明は以上です。
表を使用した繰り返し処理の使い方
Excel表(以下画面)を元に、For~Next構文の使い方についての参考例を紹介します。
参考例では、以下の条件を各個人に対してセットする事とします。
条件は、
・B列の点数が80以上であれば、C列に「合格」をセットする
・B列の点数が80未満であれば、C列に「不合格」をセットする
とします。
[画面]:
[プログラミング例]:
Sub 合否判定()
'↓処理①
Dim 行 As Double
'↓処理②
For 行 = 2 To 7
If (Cells(行, "B") >= 80) Then
Cells(行, "C") = "合格"
Else
Cells(行, "C") = "不合格"
End If
Next
End Sub
処理の流れは以下の通りとなります。
[処理①]:変数定義
Dimによる変数定義となります。
[処理②]:For~Next文の記述
変数:行に2から7の値を順次セットし、IF文を使用したB列セル点数が80以上なのか?80未満なのか?をチェックして、結果(合格?不合格?)をC列セルにセットします。
---------------------------------
1回目の処理では2が変数:番号にセットされるため、判定対象セルはB2セルとなり、B2セルが60との事からIF文80未満の条件に一致するため、C2セルに「不合格」をセットします。
---------------------------------
2回目の処理では3が変数:番号にセットされるため、判定対象セルはB3セルとなり、B3セルが80との事からIF文80以上の条件に一致するため、C3セルに「合格」をセットします。
---------------------------------
3回目の処理では4が変数:番号にセットされるため、判定対象セルはB4セルとなり、B4セルが50との事からIF文80未満の条件に一致するため、C4セルに「不合格」をセットします。
---------------------------------
4回目の処理では5が変数:番号にセットされるため、判定対象セルはB5セルとなり、B5セルが75との事からIF文80未満の条件に一致するため、C5セルに「不合格」をセットします。
---------------------------------
5回目の処理では6が変数:番号にセットされるため、判定対象セルはB6セルとなり、B6セルが63との事からIF文80未満の条件に一致するため、C6セルに「不合格」をセットします。
---------------------------------
6回目の処理では7が変数:番号にセットされるため、判定対象セルはB7セルとなり、B7セルが100との事からIF文80以上の条件に一致するため、C7セルに「合格」をセットします。
---------------------------------
※上記のプログラミング例は、VBE(VBA記述画面)に記述しないと実行ができません。VBEの開き方についてはこちらを参考にして下さい。
[実行例]:
①<実行>ボタンには上記のプログラミング例のプログラムが登録されています。この<実行>ボタンをクリックします。(※ボタンの作り方やボタンにプログラムを割り当てるにはこちらを参考にして下さい。)
②処理結果は以下の様になります。C列の合否判定に結果が表示されます。
[サンプル]:
上記で説明したファイルをダウンロードできます。ご自由にお使い下さい。
表を使用した使い方についての説明は以上です。
おわりに
プログラミング初心者には繰り返し処理という概念自体が理解しずらいと思います。「なぜ必要なのか?」「どう言う場面で必要なのか?」がわかりずらいとの意見もよく耳にします。上記で説明した内容を元に、自分なりにプログラミングした内容を実行し、動きを十分に理解してもらえればと思います。