ExcelマクロVBA入門 | 第17回.繰り返し処理(Do Loop) | Excelマクロの基礎と応用、エクセルVBAの入門・初級・初心者向け解説



最終更新日:2017-12-10

第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以外の論理演算子は使用しないようにしましょう。



では、例文です。

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


ということです。


For〜Nextの Step 2 のように、1行置きに処理したい場合は、

i = i + 2

こうすれば良い事は直ぐに理解できるでしょう。

WhileUntilは、どちらを使ってもよいです。

ただし、基本的には、どちらか一方を使うようにしましょう。

混在して使うと、プログラムが見づらくなります。


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内で待っているというような場合には必須になってきます。
これらが必要になった時に詳細は再度習得すればよいので、
まずは、基本文型を把握しておいてください。




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

第18回.最終行の取得(End,Rows.Count)
第19回.総合練習問題1
第20回.条件分岐(IF)
第21回.条件分岐(ElseIf)
第22回.条件分岐(Select Case)
第23回.メッセージボックス(MsgBox関数)
第24回.インプットボックス(InputBox関数)

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

大量VlookupをVBAで高速に処理する方法について|ExcelマクロVBA技術解説(12月12日)
オセロを作りながらマクロVBAを学ぼう|ExcelマクロVBAサンプル集(11月26日)
ScreenUpdating=False時にエラー停止後にシートが固まったら|ExcelマクロVBA技術解説(11月21日)
データクレンジングと名寄せ|ExcelマクロVBA技術解説(10月20日)
SUMIFの間違いによるパフォーマンスの低下について|エクセル関数超技(6月17日)
条件式のいろいろな書き方:TrueとFalseの判定とは|ExcelマクロVBA技術解説(6月15日)
空白セルを正しく判定する方法2|ExcelマクロVBA技術解説(5月6日)
フルパスをディレクトリ、ファイル名、拡張子に分ける|ExcelマクロVBA技術解説(4月15日)
テキストボックスの各種イベント|Excelユーザーフォーム入門(4月9日)
フォルダ(サブフォルダも全て)削除する、Optionでファイルのみ削除|ExcelマクロVBAサンプル集(4月4日)

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

1.最終行の取得(End,Rows.Count)|ExcelマクロVBA入門
2.RangeとCellsの使い分け方|ExcelマクロVBA入門
3.変数とデータ型(Dim)|ExcelマクロVBA入門
4.Range以外の指定方法(Cells,Rows,Columns)|ExcelマクロVBA入門
5.セルのコピー&値の貼り付け(PasteSpecial)|ExcelマクロVBA入門
6.定数と型宣言文字(Const)|ExcelマクロVBA入門
7.マクロって何?VBAって何?|ExcelマクロVBA入門
8.CSVの読み込み方法|ExcelマクロVBAサンプル集
9.徹底解説(VLOOKUP,MATCH,INDEX,OFFSET)|エクセル関数超技
10.ひらがな⇔カタカナの変換|エクセル基本操作



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

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


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

    ↑ PAGE TOP