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



最終更新日:2013-05-20

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


前回は、For〜Nextをやりました。


今回は、Do〜Loopです。


For〜Nextに比べると使用頻度は落ちますが、

必ず覚える必要があるものです。


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段階までにしましょう。





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

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

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

空白セルを正しく判定する方法2|ExcelマクロVBA技術解説(5月6日)
フルパスをディレクトリ、ファイル名、拡張子に分ける|ExcelマクロVBA技術解説(4月15日)
テキストボックスの各種イベント|Excelユーザーフォーム入門(4月9日)
フォルダ(サブフォルダも全て)削除する、Optionでファイルのみ削除|ExcelマクロVBAサンプル集(4月4日)
最後の空白(や指定文字)以降の文字を取り出す|エクセル関数超技(3月26日)
先頭の数値、最後の数値を取り出す|エクセル関数超技(3月26日)
Excelファイルを開かずにシート名をチェック|ExcelマクロVBAサンプル集(3月23日)
数式の参照しているセルを取得する|ExcelマクロVBAサンプル集(3月18日)
CSVの読み込み方法(改の改)|ExcelマクロVBAサンプル集(3月17日)
変数とプロシージャーの命名について|ExcelマクロVBA技術解説(2月12日)

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

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



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

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


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




    ↑ PAGE TOP