EXCEL VBA For Next Stepの使い方
For Next Stepの使い方
●はじめに
EXCEL VBAプログラムを作成する上で、ForNextなどのルーチン処理(繰り返し)は、頻繁に利用します。条件に合わせて繰り返しするなど、VBAプログラム作成する際には、大変重要になります。他のルーチン処理と違いStepを組み合わせる事により、指定した値の変化を設定する事ができます。それでは、For Next Stepの利用方法を説明いたします。
●書式の説明「For Next Stepの使い方」
For I = 初期値 To 終了値 Step 増加数(+)/(-)
●プログラム説明 ※For Next Step (繰り返しカウントを増やす +1)
変数”I”に対して1~100までを1ずつ繰り返す。
1 2 3 4 5 6 7 8 9 10 11 |
Sub fornext01() Dim I As Integer For I = 1 To 100 'Iが1~100まで繰り返す Range("A1") = I '「A1」セルに1~100までの値を代入します。 Next I End Sub |
●プログラム説明 ※For Next Step (繰り返しカウントを減らす -1)
変数”I”に対して100~1へ1ずつ減らしながら繰り返す。
1 2 3 4 5 6 7 8 9 10 11 |
Sub fornext02() Dim I As Integer For I = 100 To 1 Step -1 'Iが100~1まで繰り返す Range("A1") = I '「A1」セルに100~1までの値を代入します。 Next I End Sub |
●プログラム説明 ※For Next Step (繰り返しカウントを増やす +5)
変数”I”に対して1~100までを5ずつ繰り返す。 Iの値は、【1,6,11,16,21,26・・・・96】と変化します。
1 2 3 4 5 6 7 8 9 10 11 |
Sub fornext01() Dim I As Integer For I = 1 To 100 Step 5 'Iが1~100まで繰り返す (実際は96まで) Range("A1") = I '「A1」セルに1~96までの値を代入します。 Next I End Sub |
●プログラム説明 ※For Next Step (繰り返しカウントを増やす減らす -10)
変数”I”に対して100~1へ1ずつ減らしながら繰り返す。Iの値は、【100,90,80・・・・20,10】と変化します。
1 2 3 4 5 6 7 8 9 10 11 |
Sub fornext04() Dim I As Integer For I = 100 To 1 Step -10 'Iが100~1まで繰り返す (実際は10まで) Range("A1") = I '「A1」セルに100~10までの値を代入します。 Next I End Sub |
●プログラム説明 ※For Next Step (繰り返しカウントを増やす +5)
次のサンプルプログラムは、実際に1~100までの間でFor Next Stepを実行しますが、その増える過程をセルに転記していきたいと思います。
1 2 3 4 5 6 7 8 9 10 11 12 |
Sub forSTest() Dim I, Y As Long Y = 1 'Yの変数に1行目を指定します。 For I = 1 To 100 Step 5 Range("A" & Y) = I 'A1のセルから下に1~100まで繰り返して表示します。 Y = Y + 1 'Y行数を1ずつ増やします。 Next I End Sub |
●実行結果
実行後、A列に転記された内容見ると、1、5,11,16・・・91、96と変化しています。実際に終了は、100では無く96で終わります。To 100の意味は、100以下の最大値で終わる事を覚えて下さい。今後、プログラムを作成する上で重要な事になります。
●実行前 ※A列には何もありません。(クリックして拡大)
●実行後 ※For Next Step(+5)で実行していますので、その結果がA列に記載されています。A列の値の変化を確認して下さい。(クリックして拡大)
Exit For の使い方 (For Next)
●書式の説明 Exit For の使い方 (For Next)
続きまして、Exit Forの使い方を説明いたします。Exit Forは、For Next でループ処理実行中に、ループ条件が成立しなくでも、ループから出すことができるのが、「Exit For」になります。
1 2 3 4 5 |
For I = 1 To 10 '1~10まで繰り返す。 If I = 5 Then Exit For 'Iの値が5になったらForNextから抜ける End If Next I |
●プログラム説明 (Exit Forの使い方:サンプル)
次のサンプルプログラムは、Exit Forの使い方を表したサンプルプログラムになります。プログラムの説明ですが、InputBoxで1~10までの数値を入力します。For Nextで”I”を1~10までループします。その間に、ループ回数×入力した数値の掛け算を行います。結果が30を超えた場合は、ループ(For Next )から抜けて、MsgBoxで計算結果の最後の値を表示するプログラムです。なお、計算結果で30を超えない場合は、10回目のループした時の最後の計算結果を表示させます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
Sub Exit_for() Dim I, Ans, Gokei As Integer Ans = InputBox("1~10までの数値を入力して下さい。") '変数 Ansに数値を入力します。 For I = 1 To 10 Gokei = I * Ans 'ループの回数×入力した数値を計算します。 If Gokei > 30 Then '計算した結果が30を超えた場合は、「Exit For」でループを抜けます。 Exit For End If Next I 'Iが10に成るまで、繰り返す。 MsgBox "最後の値は、" & Gokei & " です。" '最後の計算結果を表示させます。 End Sub |
●実行結果
今回の入力値は、「6」で実行したため、Gokei(合計値)が6・12・18・24・30・36と変化して、Gokei(合計値)が30以上になったため、IF文の条件が成立し、ForNextから抜けて(Exit For)、その時の値を表示させた。
●入力値 ※プログラム実行直後に「1~10」までの数値「6」を入力します。(クリックして拡大)
●実行後 ※上記のプログラムを実行 入力値が「6」なので、30以上の条件が成立しExit Forした時の値が36になります。
入力値6 × 6回ループ = 36 (クリックして拡大)
入力値6 × 6回ループ = 36 (クリックして拡大)
For Next の使い方 (2重ループ)
●For Nextの2重ループの説明
続きまして、For Nextの応用となります。For Nextを使った2重ループ処理の説明をしたいと思います。プログラムを作成する上で、ループ処理はとでも重要な処理になります。利用する機会も多く、様々な場所で利用する機会があります。
2重ループで注意をする点ですが、ループ処理は、3重・4重などそれ以上にする事は可能ですが、記述する際は下記の様にFor Next間で囲い込む記述方法でプログラムを組み立てる必要があります。内側ループ・外側ループなど分かりやすく記述し、ForとNextの位置もタブで横位置を揃えた方が見た目も分かりやすいと思います。記述方法については、下記を参照にしてください。
2重ループで注意をする点ですが、ループ処理は、3重・4重などそれ以上にする事は可能ですが、記述する際は下記の様にFor Next間で囲い込む記述方法でプログラムを組み立てる必要があります。内側ループ・外側ループなど分かりやすく記述し、ForとNextの位置もタブで横位置を揃えた方が見た目も分かりやすいと思います。記述方法については、下記を参照にしてください。
●For Nextの2重ループの正しい記述方法 ※For Nextが正しく囲い込み記述をしている。 (クリックして拡大)
●For Nextの2重ループの間違った記述(エラー) ※ForNextが重なりあう記述になっている。(クリックして拡大)
●プログラム説明 (For Nextの2重ループ:サンプル)
下記のプログラムは、For Nextを使った2重ループ処理を表現するプログラムになります。EXCELに縦・横1~9までの数値を順番に掛け算を行い該当するセルに、掛け算の計算結果を代入するプログラムになります。※簡単に言いますとEXCELの表に掛け算の計算結果(九九)を表示するプログラムです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
Sub for_Next2() Dim TaTe_Y, Yoko_X, Gokei As Integer '変数の定義 For TaTe_Y = 1 To 9 'ループ① 縦移動のループ1~9を繰り返す For Yoko_X = 1 To 9 'ループ② 横移動のループ1~9を繰り返す Gokei = TaTe_Y * Yoko_X '縦×横のループの値を計算します。 Cells(TaTe_Y, Yoko_X) = Gokei '計算結果を縦・横のループ値に該当するセルに合計を転記します。 Next Yoko_X Next TaTe_Y End Sub |
●実行結果
実行後、空白のセルにForNextの2重ループを使い縦・横9×9の『九九』の表が作成されました。
●実行前 ※空白のセル(クリックして拡大)
●実行後 ※空白のセルに九九の値が表示されました。(クリックして拡大)
最後まで、ご覧いただきまして誠に有難うございました。
For Next Stepは、EXCEL VBAでのループ処理で初心者向きですので、早めに理解しましょう!<
また、VBAに関するテクニックや便利な手法などをこのサイトに掲載していきますので、定期的に参照していただけると幸いです。
For Next Stepは、EXCEL VBAでのループ処理で初心者向きですので、早めに理解しましょう!<
また、VBAに関するテクニックや便利な手法などをこのサイトに掲載していきますので、定期的に参照していただけると幸いです。