ExcelマクロVBA入門
第17回.繰り返し処理(Do Loop)

ExcelマクロVBAの基本と応用、エクセルVBAの初級・初心者向け解説
最終更新日:2019-08-16

第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

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

Loop [{While | Until} condition]

条件式

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

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

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

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

And、Or以外の論理演算子は使用しないようにしましょう。

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

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

実行して、確認して下さい。

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 ・・・新着記事一覧を見る

VBAクラスのAttributeについて(既定メンバーとFor Each)|VBA技術解説(10月19日)
VBAの用語について:ステートメントとは|VBA技術解説(10月16日)
VBAのマルチステートメント(複数のステートメントを同じ行に)|VBA技術解説(10月14日)
VBAコードの全プロシージャー・プロパィ一覧を取得|VBAサンプル集(10月12日)
VBAでエラー行位置(行番号)を取得できるErl関数|VBA技術解説(10月11日)
手動計算時の注意点と再計算方法|ExcelマクロVBA技術解説(10月9日)
引数の数を可変にできるパラメーター配列(ParamArray)|VBA入門(10月7日)
VBEの使い方:デバッグ|ExcelマクロVBA入門(10月6日)
VBAにおける配列やコレクションの起点について|VBA技術解説(10月5日)
VBEの使い方:オブジェクト ブラウザー|VBA入門(10月5日)


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

1.最終行の取得(End,Rows.Count)|VBA入門
2.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門
3.RangeとCellsの使い方|ExcelマクロVBA入門
4.Range以外の指定方法(Cells,Rows,Columns)|VBA入門
5.変数とデータ型(Dim)|ExcelマクロVBA入門
6.繰り返し処理(For Next)|ExcelマクロVBA入門
7.マクロって何?VBAって何?|ExcelマクロVBA入門
8.ひらがな⇔カタカナの変換|エクセル基本操作
9.空白セルを正しく判定する方法(IsEmpty,IsError,HasFormula)|VBA技術解説
10.セルに文字を入れるとは(Range,Value)|VBA入門



  • >
  • >
  • >
  • 繰り返し処理(Do Loop)

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


    記述には細心の注意をしたつもりですが、
    間違いやご指摘がありましたら、「お問い合わせ」からお知らせいただけると幸いです。
    なお、掲載のVBAコードは自己責任で使ってください。万一データ破損等の損害が発生しても責任は負いません。




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