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

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

第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
  [statements]
  [Exit Do]
  [statements]

Loop [{While | Until} condition]
必ず1回は処理を行い、処理の後で条件判定されます。

条件式

真(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

※.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

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

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

COUNTIF関数の結果は?(ツイッターお題)|エクセル雑感(5月30日)
エクセル&VBA オンライン講座|エクセル セミナー(5月29日)
アルファベットの26進(ツイッターお題)|エクセル雑感(5月19日)
VBAが消えてしまった!マクロが壊れて動かない!|エクセル雑感(5月8日)
時間に関する関数の扱い方(ツイッター投稿)|エクセル雑感(5月6日)
文字列のセルだけ結合(ツイッターのお題)|エクセル雑感(5月5日)
表示形式.言語設定|エクセル入門(5月1日)
GoogleスプレッドシートをExcelにインポートする|VBAサンプル集(4月28日)
ツイッターのお題「CSV編集」|エクセル雑感(4月25日)
プログレスバーを自作する|ユーザーフォーム入門(4月18日)


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

1.最終行の取得(End,Rows.Count)|VBA入門
2.RangeとCellsの使い方|VBA入門
3.変数宣言のDimとデータ型|VBA入門
4.マクロって何?VBAって何?|VBA入門
5.Range以外の指定方法(Cells,Rows,Columns)|VBA入門
6.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門
7.繰り返し処理(For Next)|VBA入門
8.セルに文字を入れるとは(Range,Value)|VBA入門
9.とにかく書いてみよう(Sub,End Sub)|VBA入門
10.マクロはどこに書くの(VBEの起動)|VBA入門




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


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



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