カテゴリ: Excel VBA 更新日: 2026/02/05

Excel VBAのループ処理を徹底解説!For文とDo Loopで繰り返しを自動化

Excel VBAのループ処理For/Doの基本!繰り返し処理の書き方と使いどころを紹介
Excel VBAのループ処理For/Doの基本!繰り返し処理の書き方と使いどころを紹介

先生と生徒の会話形式で理解しよう

生徒

「先生、名簿の100人分に同じ挨拶を入力したいんですが、一つずつ書くのが大変です。もっと楽にできる方法はありますか?」

先生

「それこそVBAの得意分野ですよ。ループ処理を使えば、何百行あっても一瞬で終わります。」

生徒

「ループ処理…?同じことを何度も繰り返してくれるってことですか?」

先生

「その通りです!回数を決めて回す方法や、条件に合うまで続ける方法など、基本の書き方をマスターしましょう!」

1. ループ処理とは?繰り返し作業の自動化

1. ループ処理とは?繰り返し作業の自動化
1. ループ処理とは?繰り返し作業の自動化

Excel VBAにおけるループ処理とは、特定の命令を何度も繰り返し実行する仕組みのことです。プログラミングにおいて、同じ作業をコピーして貼り付けるのは非効率的です。例えば、1行目から10行目まで色を塗るという作業を、10回命令を書くのではなく、「10回繰り返してね」と1回命令するのがループの考え方です。

ループを覚えると、データ集計や大量のファイル作成、名簿の整理といった「手作業では時間がかかる退屈な作業」をコンピューターに丸投げできるようになります。VBAには主に For...Next 文と Do...Loop 文の2種類があります。これらを使いこなすことが、エクセル自動化の第一歩です。

2. 回数を指定して繰り返す「For Next文」

2. 回数を指定して繰り返す「For Next文」
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文」

3. 条件が満たされている間続ける「Do While文」
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文」

4. 条件に当てはまるまで繰り返す「Do Until文」
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」

5. ループを途中で抜ける「Exit For / Exit Do」
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. ループ処理を速くするコツ!画面更新の停止

6. ループ処理を速くするコツ!画面更新の停止
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. ループが止まらない!「無限ループ」の対処法

7. ループが止まらない!「無限ループ」の対処法
7. ループが止まらない!「無限ループ」の対処法

もし間違えて Do Loop の条件をずっと満たすように書いてしまうと、Excelが砂時計(あるいはぐるぐるマーク)のまま固まってしまうことがあります。これが無限ループです。パソコンを初めて触る方はパニックになるかもしれませんが、焦る必要はありません。

もし止まらなくなったら、キーボードの Ctrlキー を押しながら Breakキー(または Escキー) を何度か叩いてください。プログラムを強制的に中断させることができます。中断した後は、なぜ条件が終わりを迎えなかったのか、コードを見直してみましょう。

8. ForとDoどっちを使えばいい?使い分けの基準

8. ForとDoどっちを使えばいい?使い分けの基準
8. ForとDoどっちを使えばいい?使い分けの基準

最後に、どっちのループを使うべきか迷ったときの基準を紹介します。基本的には「終わりが最初から見えているか」で判断します。

種類 向いているケース 例え話
For Next 回数が決まっている時、セルの範囲が決まっている時 グラウンドを5周走る
Do Loop 回数は不明だが、特定の条件まで続けたい時 雨が降るまで外で遊ぶ

初心者の方は、まずは For Next から使い始めるのがおすすめです。理由は、回数を指定するので無限ループになりにくく、安全に練習できるからです。慣れてきたら、データの量に合わせて柔軟に動く Do Loop に挑戦してみましょう!

カテゴリの一覧へ
新着記事
New1
Office Scripts
Office Scriptsで日付判定!Excel条件付き書式を自動化して期限管理をラクにする方法
New2
Office Scripts
Office Scripts普及の歴史とMicrosoftの方向性!Excel自動化が進化してきた流れをやさしく解説
New3
Excel VBA
Excel VBA関数を用途別に作成!計算・文字列処理の基本を初心者向けに解説
New4
Office Scripts
Office Scriptsで条件付き書式を自動化!数値変化に応じてExcelの書式を自動更新する方法
人気記事
No.1
Java&Spring記事人気No1
Excel VBA
Excelマクロのセキュリティ設定の基本!安全に実行するための信頼センター設定まとめ
No.2
Java&Spring記事人気No2
Office Scripts
Office Scriptsでできること・できないことを完全整理!Excel自動化の基本と限界をやさしく解説
No.3
Java&Spring記事人気No3
Excel VBA
目的別にモジュールを分割する方法!処理単位で整理して見やすくするテクニック
No.4
Java&Spring記事人気No4
Excel VBA
Excel VBAとOffice Scriptsの違いを比較!初心者でもわかる学ぶべきスキル
No.5
Java&Spring記事人気No5
Excel VBA
Excel VBA基本文法の総まとめ!初心者が必ず押さえるべき20の基礎ポイント完全ガイド
No.6
Java&Spring記事人気No6
Office Scripts
Office Scriptsで条件付き書式を自動化!Excel自動化初心者向けスクリプト操作の基本
No.7
Java&Spring記事人気No7
Excel VBA
Excel VBAの開発環境を最速で整える!VBEの開き方から基本操作まで完全ガイド
No.8
Java&Spring記事人気No8
Excel VBA
Excel VBAプロジェクト構成とモジュール管理を完全解説!初心者でも迷わない基本の考え方