【Excel VBA入門】For文の使い方。繰り返し処理の基本を学ぶ

【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文の入れ子(ネスト)のイメージ

セルを扱うときに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操作の自動化にお役立ちできれば幸いです。