Excel VBAのループ処理を徹底解説!For文とDo Loopで繰り返しを自動化
生徒
「先生、名簿の100人分に同じ挨拶を入力したいんですが、一つずつ書くのが大変です。もっと楽にできる方法はありますか?」
先生
「それこそVBAの得意分野ですよ。ループ処理を使えば、何百行あっても一瞬で終わります。」
生徒
「ループ処理…?同じことを何度も繰り返してくれるってことですか?」
先生
「その通りです!回数を決めて回す方法や、条件に合うまで続ける方法など、基本の書き方をマスターしましょう!」
1. ループ処理とは?繰り返し作業の自動化
Excel VBAにおけるループ処理とは、特定の命令を何度も繰り返し実行する仕組みのことです。プログラミングにおいて、同じ作業をコピーして貼り付けるのは非効率的です。例えば、1行目から10行目まで色を塗るという作業を、10回命令を書くのではなく、「10回繰り返してね」と1回命令するのがループの考え方です。
ループを覚えると、データ集計や大量のファイル作成、名簿の整理といった「手作業では時間がかかる退屈な作業」をコンピューターに丸投げできるようになります。VBAには主に For...Next 文と Do...Loop 文の2種類があります。これらを使いこなすことが、エクセル自動化の第一歩です。
2. 回数を指定して繰り返す「For Next文」
For Next(フォー・ネクスト)文は、「1回目から10回目まで」というように、あらかじめ繰り返す回数が決まっているときに使います。一番よく使われるループの形です。カウンターとなる「変数(へんすう:値を入れておく箱)」を一つ用意して、その数字を増やしながら処理を進めていきます。
例えば、1行目から5行目のA列に数字を入れるコードは次のようになります。
Sub ForNextSample()
Dim i As Integer
' 変数iが1から5になるまで繰り返します
For i = 1 To 5
Cells(i, 1).Value = i & "行目です"
Next i
End Sub
この i はカウンターの役割です。最初は1が入り、Next i に到達すると2になり、5が終わるまでぐるぐる回ります。結果は以下のようになります。
1行目です
2行目です
3行目です
4行目です
5行目です
3. 条件が満たされている間続ける「Do While文」
Do While(ドゥー・ホワイル)文は、回数は決まっていないけれど「条件が満たされている間はずっと繰り返す」というときに使います。「While」は「〜の間」という意味です。例えば、「セルの中身が空っぽになるまで、ずっと下の行を見ていく」という処理にぴったりです。
Sub DoWhileSample()
Dim rowNum As Integer
rowNum = 1
' A列のセルが空("")ではない間、処理を続けます
Do While Cells(rowNum, 1).Value <> ""
' セルの背景色を黄色にします
Cells(rowNum, 1).Interior.Color = vbYellow
' 次の行へ進むために数字を1増やします
rowNum = rowNum + 1
Loop
End Sub
この rowNum = rowNum + 1 という記述は非常に重要です。これを忘れると、ずっと同じ行をチェックし続けてしまい、Excelが止まってしまう「無限ループ」という状態になるので注意しましょう。
4. 条件に当てはまるまで繰り返す「Do Until文」
Do Whileと似ていますが、Do Until(ドゥー・アンティル)文という書き方もあります。「Until」は「〜まで」という意味です。つまり「条件が正しくなるまで続ける(=条件が間違っている間は回す)」という逆の考え方です。
「テストで100点を取るまで勉強を続ける」というようなイメージですね。どちらを使っても同じ結果を出せることが多いですが、日本語として自然な方を選ぶと、後でコードを読み返したときに理解しやすくなります。
Sub DoUntilSample()
Dim n As Integer
n = 1
' nが10より大きくなるまで繰り返す
Do Until n > 10
Cells(n, 2).Value = "データ" & n
n = n + 1
Loop
End Sub
5. ループを途中で抜ける「Exit For / Exit Do」
ループの途中で「あ、もう目的のものが見つかったから終わりたい!」という場合があります。そんなときに使う魔法の言葉が Exit(エグジット) です。If 文(条件分岐)と組み合わせて使うのが一般的です。
例えば、100行目まで探す予定だったけれど、途中で「エラー」という文字を見つけたらそこで中止する、といった動きができます。
Sub ExitSample()
Dim i As Integer
For i = 1 To 100
If Cells(i, 1).Value = "エラー" Then
MsgBox i & "行目でエラーを発見したので中止します"
' ループを強制終了して外に出る
Exit For
End If
Next i
End Sub
6. ループ処理を速くするコツ!画面更新の停止
大量のループを回すと、Excelの画面がチカチカ動いて動作が重くなることがあります。これは、一回一回の処理を律儀に画面に表示しようとするからです。プログラミング未経験の方が最初に覚えるべき高速化テクニックが画面更新の停止です。
Application.ScreenUpdating = False という呪文を最初に書くと、裏側でこっそり計算してくれるので、スピードが劇的に上がります。処理が終わった後に True に戻すのをセットで覚えましょう。
Sub FastLoop()
' 画面の動きを止めます
Application.ScreenUpdating = False
Dim i As Long
For i = 1 To 10000
Cells(i, 3).Value = "高速処理"
Next i
' 画面の動きを元に戻します
Application.ScreenUpdating = True
MsgBox "完了しました!"
End Sub
7. ループが止まらない!「無限ループ」の対処法
もし間違えて Do Loop の条件をずっと満たすように書いてしまうと、Excelが砂時計(あるいはぐるぐるマーク)のまま固まってしまうことがあります。これが無限ループです。パソコンを初めて触る方はパニックになるかもしれませんが、焦る必要はありません。
もし止まらなくなったら、キーボードの Ctrlキー を押しながら Breakキー(または Escキー) を何度か叩いてください。プログラムを強制的に中断させることができます。中断した後は、なぜ条件が終わりを迎えなかったのか、コードを見直してみましょう。
8. ForとDoどっちを使えばいい?使い分けの基準
最後に、どっちのループを使うべきか迷ったときの基準を紹介します。基本的には「終わりが最初から見えているか」で判断します。
| 種類 | 向いているケース | 例え話 |
|---|---|---|
| For Next | 回数が決まっている時、セルの範囲が決まっている時 | グラウンドを5周走る |
| Do Loop | 回数は不明だが、特定の条件まで続けたい時 | 雨が降るまで外で遊ぶ |
初心者の方は、まずは For Next から使い始めるのがおすすめです。理由は、回数を指定するので無限ループになりにくく、安全に練習できるからです。慣れてきたら、データの量に合わせて柔軟に動く Do Loop に挑戦してみましょう!
まとめ
ループ処理の重要ポイントを総復習
Excel VBAにおけるループ処理は、繰り返し作業を効率化するための最重要テクニックのひとつです。特に業務でよく発生する「大量データの処理」「同じ操作の繰り返し」「条件に応じた処理の分岐」などを自動化できるため、実務レベルで必須のスキルといえます。今回解説したFor文やDo Loop文を理解することで、手作業では数十分かかる作業も数秒で完了させることが可能になります。
For Next文は、繰り返す回数があらかじめ決まっている場合に非常に有効で、初心者にも扱いやすい構文です。一方、Do While文やDo Until文は、条件に応じて処理を継続するため、より柔軟な制御が可能になります。これらを適切に使い分けることが、VBAプログラミングの理解を一段と深めるポイントです。
実務で役立つループ処理の活用例
例えば、顧客リストの全件に対してメール文を作成したり、売上データを一括で集計したり、特定の条件に一致するデータだけを抽出するなど、ループ処理はさまざまな業務に応用できます。さらに、Exit文を組み合わせることで処理の途中終了も可能になり、無駄な処理を省くことができます。
また、画面更新の停止(Application.ScreenUpdating = False)を利用することで、処理速度を大幅に向上させることができるため、大量データを扱う場合には必ず意識しておきたいポイントです。
サンプルプログラムで理解を定着させる
Sub LoopSummarySample()
Application.ScreenUpdating = False
Dim i As Integer
' 1から10まで繰り返し
For i = 1 To 10
' 5で処理を終了
If i = 5 Then
MsgBox "5に到達したので終了します"
Exit For
End If
Cells(i, 1).Value = "処理中:" & i
Next i
Application.ScreenUpdating = True
MsgBox "ループ処理が完了しました"
End Sub
このコードでは、For文による繰り返し処理、条件分岐、Exitによる途中終了、そして高速化テクニックまでをまとめて確認できます。実際に動かしてみることで、ループ処理の流れが直感的に理解できるでしょう。
無限ループを防ぐための注意点
Do Loopを使う際は、必ずループを終了させる条件を意識することが重要です。条件が変化しないままだと無限ループに陥り、Excelがフリーズしてしまう可能性があります。特に「変数を更新する処理」を忘れないことが大切です。
万が一止まらなくなった場合でも、CtrlキーとBreakキー、またはEscキーで強制停止できるため、落ち着いて対処しましょう。
For文とDo Loopの使い分けまとめ
VBAのループ処理を理解する上で最も大切なのは、「どの場面でどの構文を使うべきか」を判断できることです。回数が決まっている場合はFor文、条件で判断する場合はDo Loopを使うという基本をしっかり押さえておきましょう。この考え方を身につけることで、コードの可読性も向上し、後から見直したときにも理解しやすくなります。
繰り返し処理はVBAの基礎でありながら応用範囲が非常に広く、データ処理の効率化や自動化に直結する重要なスキルです。今回の内容を何度も実践し、自然に書けるようになるまで繰り返し練習することが、上達への近道です。
生徒
「ループ処理って、同じことを繰り返すだけだと思っていましたが、条件によって使い分けるのが大事なんですね。」
先生
「その通りです。For文とDo Loopの違いを理解することで、より柔軟なプログラムが書けるようになります。」
生徒
「Exitで途中終了できるのも便利ですね。無駄な処理を減らせそうです。」
先生
「実務ではとても重要な考え方です。処理を効率化する意識を持つと、より良いコードになりますよ。」
生徒
「画面更新を止めるだけで速くなるのも驚きました!」
先生
「細かい工夫の積み重ねが、大きな差になります。これからも実践しながら身につけていきましょう。」