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 に挑戦してみましょう!