この記事を読むのに必要な時間は約 8 分です。
「For文」って知っていますか?
VBAをやるなら、ぜったい知っておきたい、ループの文法の1つです。
同じような作業を何度も行うならループの処理が便利。
意図したとおりに繰り返せれば、For文のことが好きになるかもしれません。
今回は、For文を使ってセルに値を入れながら説明したいと思います。
目次(リンク)
ループする変数を定義
For文の場合、何回ループするのか指定することが出来ます。
「何回」のところを、変数を使って表現するので、まずはこの変数を用意します。
整数型の変数「i」を定義するなら、書き方はこれ。
1 |
Dim i As Integer |
「Integer」は整数という意味で、頭文字を取って「i」が使われることが多いです。
教材とか学校で最初に習うときなど、この変数を見かけるんじゃないでしょうか。
とりあえず変数を用意したら、For文を書きます。
For ~ Next の書き方
ざっくり日本語で書くと、
1 2 3 4 5 |
For 変数の初期値 To 最大値 繰り返す内容 Next [変数] 'ここの変数は省略可 |
こうなります。
変数iを使って、1から10までループさせたいなら、
ついでにループさせる処理も書くと、
Sheet1の指定したセルに、変数iを入れていく処理です。
1 2 3 4 5 6 7 8 9 10 11 12 |
Public Sub Text1() Dim i As Integer For i = 1 To 10 'B3セルから、変数iの値を入力 Sheets("Sheet1").Cells(i + 2, 2) = i Next i End Sub |
「Cells」は、Cells(行番号, 列番号) の書き方です。
B3セルなら、Cells(3, 2)です。
「Range」の場合はRange(“B3”) のように書くので、「行と列がRangeと逆だ」と考えると覚えやすいかもしれません。
実行前の準備
ブレイクポイントを入れてみる
プログラムを実行すると、変数iの値がどんなふうに変わっていくのか知りたいんじゃないでしょうか。
途中でいったん止まるには、ブレイクポイント(赤い●のやつ)を使います。
左クリックで設定でき、設定したところまで処理が進むと一時停止してくれます。
空の行や変数の定義など、一部の個所には入れれません。
ローカルウインドウを表示しておく
ブレイクポイントなどで一時停止しているときに、変数の上へマウスポインターを持っていくと、今何の値が入っているのか表示されます。
でも何度もコメントをチラ見するような変数の確認方法はメンドクサイので、「ローカルウインドウ」を使います。
10回ループしてみる
早速10回ループさせてみたいと思います。
B3のセルから下へ、1、2、3・・・、10まで数字が入ってくれる想定です。
処理開始はF5キーまたは緑色の三角のボタンを押下。
ちゃんとブレイクポイントで止まりました。
ローカルウインドウを見ると、iに1が入っています。
F8キーで1ステップだけ次に進みます。
ここでExcelシート側に表示を切り替えてみましょう。
変数iの値「1」が、B3セルに入力されました。
もう1度F8キーを押すと、2周目に入りました。
変数のiも2になっています。
さらにF8キーを押すと、
シート側では、変数iの値が2になって、セルに入力されました。
順調に大きくなっています。
問題なさそうなので、ブレイクポイントを外してF5キーで最後まで動かします。
想定通り10まで入りました!!
ループを抜ける
最後までループさせたいこともありますが、時にはループの途中で抜けたいこともあります。
For文を抜けるなら普通はこれ
For文を抜けるなら、使うのはこれです。
1 |
Exit For |
例えば、i = 5になった時にFor文を抜けるなら、
1 2 3 4 5 6 7 8 9 10 |
For i = 1 To 10 'B3セルから、変数iの値を入力 Sheets("Sheet1").Cells(i + 2, 2) = i If i = 5 Then Exit For End If Next i |
これで6以降は進みません。
実際にやってみます。
i = 5になって、IF文に入りました。
「Exit For」にブレイクポイントを入れて止めていますが、F8キーで1ステップ進めると・・・
「Exit For」を通ると、For文を抜けEnd Subへ飛びました。
End Subで処理は終わりです。
シート側を見てみると、5までしか入っていません。
意図した通り、For文を抜けられたことが分かります。
For文を抜ける、悪い例
まったくおすすめしませんが、For文を抜けるにはこんな書き方も出来ます。
1 2 3 4 5 6 7 8 9 10 11 |
For i = 1 To 10 'B3セルから、変数iの値を入力 Sheets("Sheet1").Cells(i + 2, 2) = i If i = 5 Then 'ループを抜ける悪い例 i = 10 End If Next i |
10までループするので、i = 5の時に10を入れてしまえば、「Next i」で11になるので最大値を超えてループを抜けます。
何でこのやり方がよろしくないのか?
それは、メンテする回数が無駄に増えるからです。
例えば、最大値を10から15に変えたとします。
本来ならソースコードの変更は1ステップだけ、
1 |
For i = 1 To 15 |
で良いんです。
でも、変な抜け方をしていると、
1 |
i = 15 |
に変えないといけません。
余計な手間が増えますし、最大値を変数で書いていたら、何のための「i = 10」なのか分かりづらくなってしまいます。
そんなこんなで、「Exit For」推奨です!!
まとめ:処理をループさせる、For-Nextの書き方
ループの1つ、For文の書き方でした。
For とNextの間に書いた処理を、最大値までの間繰り返すことが出来ます。
ループを抜けるにはExit For です。
プログラム言語によって書き方は変わりますが、ほとんどの言語にFor文があるので、覚えておいて損はないはず。
ぜひ使ってみてくださいね。
最後までお読みいただき、ありがとうございました。