【Excel VBA入門】For文の使い方。繰り返し処理の基本を学ぶ
こんにちは、業務自動化ツール開発担当の吉池(@valmore_myoshi)です。
みなさん、Excel操作のなかで同じことを繰り返す作業はありませんか?単純だけど、量が多いと時間がかかって仕方ありません。
そんなときは繰り返し(ループ)処理を簡単に書けるFor文を使いましょう!For文を使うことで簡潔にループ処理を書けるようになります。
本記事では、For文の基本的な使い方を豊富なコード例とともに解説します。
目次
For文の使い方
まずは、For文の書き方を見ていきましょう。
For カウンタ変数 = 初期値 To 終了値 繰り返し処理 Next
書き方からわかるようにFor文にはカウンタ変数と初期値、終了値が必要です。繰り返し処理が終わったあとで初期値に1が加算され、終了値を超えるまで繰り返されます。
カウンタ変数には繰り返しごとに初期値に1加算した値が入ります。例えば、カウンタ変数を組み合わせて文字を表示する処理を5回繰り返すプログラムを見てみましょう。
Dim i As Integer For i = 1 To 5 Debug.Print i & "回目の繰り返し処理です。" Next
For文を入れ子に(ネスト)する
For文の中にFor文を入れることを入れ子(ネスト)といいます。外側のFor文が繰り返されるごとに、内側のFor文の繰り返しがすべて実行されます。
セルを扱うときにFor文をネストさせることはよくあります。例えば、5行×5列のセルに文字列を代入する処理を考えてみましょう。For文をネストさせれば下記のように簡単に書けます。
Dim i As Integer, j As Integer For i = 1 To 5 For j = 1 To 5 Cells(i, j).Value = i & " × " & j Next Next
カウンタの増減や間隔の指定にはStepを使う
For文は繰り返しのたびに、最初に設定した初期値に1が加算されますが、Stepを使うことで加算する値を変更できます。
例えば、2ずつ加算する場合は下記のように書きます。初期値に1を設定しているので、1, 3, 5, 7, 9と奇数が表示されます。
Dim i As Integer For i = 1 To 10 Step 2 Debug.Print i & "回目の繰り返し処理です。" Next
また、Stepにマイナス値を設定することで初期値を減算させることも可能です。例えば、下記は初期値に5を設定し、1ずつ減算しています。
Dim i As Integer For i = 5 To 1 Step -1 Debug.Print i & "回目の繰り返し処理です。" Next
ループを途中で飛ばす、抜けたいとき
条件を満たしたらループを飛ばしたり、途中で抜けたいとき、ありますよね。ほかのプログラミング言語を経験している方であれば、Continue使えないの?と思うかもしれませんが、VBAにはContinueはありません。
なので、条件にあわせてループを飛ばしたいなら、If文を使いましょう。例として3回目の処理だけ飛ばすように書いてみます。
Dim i As Integer For i = 1 To 5 If Not i = 3 Then Debug.Print i & "回目の繰り返し処理です。" End If Next
途中でループから完全に抜けるのであればExit Forを使えます。例えば、3回繰り返したらループを終了する処理は下記のように書きます。
Dim i As Integer For i = 1 To 5 Debug.Print i & "回目の繰り返し処理です。" If i = 3 Then Exit For End If Next
全要素を繰り返すFor Each文の使い方
配列やコレクションに含まれる全要素を繰り返したいときはFor Each文が最適。For文でも書けないことはないですが、For Each文では要素の数だけ繰り返してくれるのでとても便利です。
For Each 変数 In グループ 繰り返し処理 Next
例えば、配列の値をすべて表示する処理を取り上げてみます。配列を用意し、各要素を一つずつ格納する変数を定義します。For Each文で最初に設定する変数にはVariant型かオブジェクト型しか使えないので要注意です!
Dim element As Variant, members As Variant members = Array("John", "Mary", "Bob") For Each element In members Debug.Print "Hello, " & element Next
For文とDo While ~ Loop文の使い分け
繰り返し処理にはFor文のほかにもDo While ~ Loop文があります。Do While ~ Loop文は条件を満たしている間ループ処理させることが可能です。
Do While 条件式 繰り返し処理 Loop
例えば、セルに値が入っていれば、となりのセルに〇を代入する処理を書いてみると下記のようになります。
‘ アクティブセルの値が空でなければループ処理続行 Do While ActiveCell.Value <> "" ActiveCell.Next.Value = "〇" ' アクティブセルの一つ下のセルを選択 ActiveCell.Offset(1).Select Loop
このようにFor文でもDo While ~ Loop文でも繰り返し処理が書けますが、条件の指定方法がそれぞれ異なります。
ループ回数を指定したり、配列やコレクションの要素数分だけループさせたいときはFor文がオススメ!逆に繰り返し回数がわからなかったり、ループ回数に依存しない条件の場合はDo While ~ Loop文が適しています。
Do While Loop文について詳しく知りたい方はこちらの記事をご覧ください。
【Excel VBA入門】Do While ~ Loop文の使い方。条件付きループを学ぶ
まとめ
繰り返し処理を簡潔に記述できるFor文について解説しました。For文さえ覚えてしまえば、面倒なループ処理ともおさらばです。
繰り返し処理はなにかと面倒なもの。VBAを駆使してExcel操作の自動化に取り組む背景には、こうした繰り返し処理に嫌気がさしたからという方も多いのではないでしょうか?
本記事を通してExcel操作の自動化にお役立ちできれば幸いです。