VBA入門
繰り返し処理(Do Loop)

ExcelマクロVBAの基本と応用、エクセルVBAの初級・初心者向け解説
公開日:2013年5月以前 最終更新日:2021-08-21

第17回.繰り返し処理(Do Loop)


繰り返し処理として前回はFor~Nextをやりました。
今回はDo~Loopです。


For~Nextに比べると使用頻度は落ちますが、必ず覚える必要があるものです。

For~Nextは、繰り返す回数をあらかじめ指定するものでしたが、
Do~Loopは、繰り返す回数ではなく、繰り返す条件を指定するものです。


Do~Loopの構文

Do [{While | Until} condition]
  [statements]
  [Exit Do]
  [statements]

Loop

または、次の構文を使用できます。

Do
  [statements]
  [Exit Do]
  [statements]

Loop [{While | Until} condition]

condition 省略可能です。
真 (True) または偽 (False) を評価する数式、あるいは文字列式を指定します。
引数 condition の値が Null 値の場合、引数 condition は偽 (False) であるとみなされます。
statements 引数 condition が真 (True) である間、または引数 condition が真 (True) になるまで繰り返し実行される、
任意の行数のステートメントを記述します。

これは、Excelのヘルプからの抜粋です。
これを読んでわかるなら苦労しないし、このサイトは訪れないと思いますので、
もう少し詳しく、説明します。
余分なものを消して、さらに日本語で書くと

Do [While 条件式]
  ・・・処理・・・
Loop

または、

Do [Until 条件式]
  ・・・処理・・・
Loop

Whileは、条件を満たす間、・・・処理・・・を実行します。
Untilは、条件を満たす迄、・・・処理・・・を実行します。

次のような書き方もありますが、特に覚えなくても良いでしょう。

Do
  ・・・処理・・・

Loop [{While | Until} 条件式]

これは、必ず1回は処理を行い、処理の後で条件判定されます。


条件式

真(True)か偽(False)を評価する数式または文字列式を指定します。

数式とは、数値と比較演算子・論理演算子の組み合わせ、
文字列式とは、文字列と比較演算子・論理演算子の組み合わせです。

比較演算子 意味
= 等しい
<> 等しくない
> より大きい
>= 以上
< より小さい
<= 以下

論理演算子 意味
And 論理積
Or 論理和
Xor 排他論理和
Eqv 論理等価
Imp 論理包含

And、Or、Notだけ理解できていれば問題ありません。


Do Loop 例文

Do Loopの例文です。

A1セルからA10セルに、1を入れる場合です。

Sub 練習1()
  Dim i
  i = 1
  Do While i <= 10
    Cells(i, 1) = 1
    i = i + 1
  Loop
End Sub

または

Sub 練習2()
  Dim i
  i = 1
  Do Until i > 10
    Cells(i, 1) = 1
    i = i + 1
  Loop
End Sub
※.Valueは省略しています。

Whileは、条件を満たす間
Untilは、条件を満たす迄

従って、
WhileUntilの条件は、補集合の関係になります。
つまり、

Not(Whileの条件) = Untilの条件
Whileの条件 = Not(Untilの条件)

このような関係になります。

また、
i = 1
これは、変数iに1を入れています。
そして、
i = i + 1
これは、変数iに1を足して、変数iに入れ直しています。
つまり、変数iは1増える事になります。
1行ずつ説明を書くと

Sub 練習1()
  Dim i        '変数iを宣言
  i = 1         '変数iに1を入れる
  Do While i <= 10  '変数iが10以下の間処理を続ける
    Cells(i, 1) = 1 'A列のi行に1を入れる
    i = i + 1     '変数iを1増やす
  Loop        'Doの処理範囲はここまで
End Sub

マクロVBAコードとコメントを見比べながら、しっかりと理解してください。

For~Nextの Step 2 のように、1行置きに処理したい場合は、
i = i + 2
こうすれば良い事は直ぐに理解できるでしょう。

WhileUntilは、どちらを使ってもよいです。
ただし、基本的にはどちらか一方を主に使うようにしましょう。
混在して使うと、プログラムが読みづらくなってしまう場合があります。


Exit Do

Exit Doは、Do~Loopのループを抜けます。

指定の条件になる前に、
Do~Loopのループ処理を終了したい場合に使用します。
良く使う場合としては、

Do
 処理を終了したい時に、Exit Do
Loop

このように、Doに終了条件を書かずに、
そのループの中で、終了条件を判定し、処理を終了する場合です。


Do~Loopのネスト(入れ子)

縦10行、横10列に1を入れる場合です。

Sub 練習3()
  Dim i, j
  i = 1
  Do Until i > 10
    j = 1
    Do Until j > 10
      Cells(i, j) = 1
      j = j + 1
    Loop
    i = i + 1
  Loop
End Sub

F8ステップインで実行して、内側のDoから外側のDoに移る様子を確認して下さい。

Do~Loopのネストは、概ね3段階までにしましょう。


最後に一言

Do~Loopは、For~Nextに比べると使用頻度も落ちますし、使い方が少々難しくなります。
しかしVBAが上達していき、いろいろな処理を書き始めると、繰り返し回数が不明な場合も増えてきます。

例えばフォルダ内の全ファイルを処理する場合や、
外部入力が完了するまでVBA内で待っているというような場合には必須になってきます。
もちろん、これらが必要になった時に詳細を確認すれば良いです。
まずは、基本文型を把握しておいてください。




同じテーマ「マクロVBA入門」の記事

第14回.文字の結合(&アンパサンド)と継続行(_アンダーバー)
第15回.四則演算と注釈(コメント)
第16回.繰り返し処理(For Next)
第17回.繰り返し処理(Do Loop)
第18回.最終行の取得(End,Rows.Count)
第19回.総合練習問題1
第20回.条件分岐(IF)
第21回.条件分岐(ElseIf)
第22回.条件分岐(Select Case)
第23回.メッセージボックス(MsgBox関数)
第24回.インプットボックス(InputBox関数)


新着記事NEW ・・・新着記事一覧を見る

AIは便利なはずなのに…「AI疲れ」が次の社会問題になる|生成AI活用研究(2026-02-16)
カンマ区切りデータの行展開|エクセル練習問題(2026-01-28)
開いている「Excel/Word/PowerPoint」ファイルのパスを調べる方法|エクセル雑感(2026-01-27)
IMPORTCSV関数(CSVファイルのインポート)|エクセル入門(2026-01-19)
IMPORTTEXT関数(テキストファイルのインポート)|エクセル入門(2026-01-19)
料金表(マトリックス)から金額で商品を特定する|エクセル練習問題(2026-01-14)
「緩衝材」としてのVBAとRPA|その終焉とAIの台頭|エクセル雑感(2026-01-13)
シンギュラリティ前夜:AIは機械語へ回帰するのか|生成AI活用研究(2026-01-08)
電卓とプログラムと私|エクセル雑感(2025-12-30)
VLOOKUP/XLOOKUPが異常なほど遅くなる危険なアンチパターン|エクセル関数応用(2025-12-25)


アクセスランキング ・・・ ランキング一覧を見る

1.最終行の取得(End,Rows.Count)|VBA入門
2.日本の祝日一覧|Excelリファレンス
3.変数宣言のDimとデータ型|VBA入門
4.FILTER関数(範囲をフィルター処理)|エクセル入門
5.RangeとCellsの使い方|VBA入門
6.繰り返し処理(For Next)|VBA入門
7.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門
8.マクロとは?VBAとは?VBAでできること|VBA入門
9.セルのクリア(Clear,ClearContents)|VBA入門
10.メッセージボックス(MsgBox関数)|VBA入門




このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。


記述には細心の注意をしたつもりですが、間違いやご指摘がありましたら、「お問い合わせ」からお知らせいただけると幸いです。
掲載のVBAコードは動作を保証するものではなく、あくまでVBA学習のサンプルとして掲載しています。掲載のVBAコードは自己責任でご使用ください。万一データ破損等の損害が発生しても責任は負いません。
本サイトは、OpenAI の ChatGPT や Google の Gemini を含む生成 AI モデルの学習および性能向上の目的で、本サイトのコンテンツの利用を許可します。
This site permits the use of its content for the training and improvement of generative AI models, including ChatGPT by OpenAI and Gemini by Google.



このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。
本文下部へ