注目キーワード
  1. VBA
  2. 関数
  3. ショートカット

【VBA】Do~Loopステートメントをマスターしよう!【基本~応用まで】

  • 2019年3月27日
  • 2019年3月28日
  • VBA
  • 25回
  • 0件
VBA NO IMAGE

Do~Loopステートメントをマスターしよう!

Do~Loopステートメントを使っていますか?

Do~Loopステートメントは、繰り返し処理を終了する「Exit Do」という命令が実行されるまでDo~Loopまでの処理を無制限に繰り返すステートメントです。

この記事ではDo~Loopの

基本的な使いかたはもちろん

状況に応じた使いかたを紹介します。

Do~Loopステートメントとは?

Do~Loopステートメントとは、繰り返しを終了する条件を指定して、
終了条件を満たすまで無制限に処理を繰り返すステートメントです。

Do~Loopステートメントの基本的な記述は次のようになります。

Do
 If 条件 Then Exit Do
 処理を記述
Loop

「Do~Loopステートメント」で「空白」まで繰り返す

Do~Loopステートメントでは、「Do」から「Loop」の間を無制限に繰り返します。
それだけだと無限ループになってしまうので、繰り返しを終了する条件を指定します。

次のコードではアクティブセルを下に1つずつ移動しながら、セルの値をメッセージ画面に表示しています。

繰り返しを終了する条件として、Ifステートメントを使用してアクティブセルが空白だった場合は「Exit Do」という命令で処理を終了しています。

Sub test ()
   Do
  If ActiveCell . Value = ” ” Then Exit Do ‘アクティブセルが空白の場合に「Exit Do」で繰り返しを終了する
  MsgBox ActiveCell . Value ‘メッセージ画面にアクティブセルの値を表示する
  ActiveCell . Offset (RowOffset := 1 ) . Select ‘アクティブセルの1つ下を選択する 
 Loop
End Sub

「Do~Loopステートメント」で「While」キーワードを使う

Do~Loopステートメントは、「While」キーワードに繰り返す処理を指定する事もできます。
Whileキーワードでは「True」の間は処理を繰り返し「False」になったら繰り返し処理を終了します。

次のコードでは変数iに繰り返し処理を実行するたびに1を加算して変数iの値が5になった場合に処理を終了しています。

Sub test ()
 Dim i As Integer ‘変数iを整数型で宣言
 i = 1 ’変数iに1を代入
  Do While i <= 5 ’変数iが5以上になったら処理を終了する
    MsgBox i & “回目の処理です。”
    i = i + 1 ‘繰り返すごとに変数iに1を加算する
  Loop
End Sub

「Do~Loopステートメント」で「Until」キーワードを使う

上記のコードはWhileキーワードでTrueの間は繰り返し処理を実行していましたが、
「Until」キーワードを使うとFalseの間は繰り返し処理を実行してTrueになったら処理を終了できます。

下記のコードでは、上記のコードと条件を逆にして変数iが5以上になったらTrueになり繰り返し処理を
終了しています。

処理の結果は上記のコードと同じになります。

Sub test ()
 Dim i As Integer ‘変数iを整数型で宣言
 i = 1 ‘変数iに1を代入
  Do Until i >= 5 ’変数iが5以下か判定する
    MsgBox i & “回目の処理です。”
    i = i + 1 ‘繰り返すごとに変数iに1を加算する
  Loop
End Sub

「While」キーワードと「Until」キーワードの補足

上記で紹介したコードでは「Do」の後に「While」または「Until」で終了条件をしていしましたが、
「Loop」の行に終了条件を付けることもできます。

この場合は、終了条件を満たしていても最低1回は処理を実行する事ができます。
目的に応じて条件式を使い分ける事も可能です。

「Do~Loopステートメント」を「複数」(ネスト)使用する。

セルの行に対して行った処理を、列を移動して処理を実行したい場合などに
Do~Loopステートメントを2重以上にして処理を実行する事もできます。

下記のコードでは縦と横の5×5のセルに1を入力しています。

複数使用の場合はコードが複雑になり過ぎないように3段までの記述にしましょう。
Sub test ()
  Dim i, j As Integer ‘変数 i,y を整数型で宣言する
  i = 1 ‘変数 i に1を代入する
  Do Until i > 5 ‘変数 i が5以下か判定する
    y = 1 ‘変数 y に1を代入する
    Do Until y> 5 ‘変数 y が5以下か判定する
      Cells(i, y) = 1 ‘( i , y )の座標のセルに1を入力する
      y = y + 1 ‘変数y に1を加算する
    Loop
    i = i + 1 ‘変数i に1を加算する
  Loop
End Sub

「Do~Loopステートメント」に「複数条件」を指定する

Do~Loopステートメントで5以上で10以下の場合など複数の条件を指定する場合には、
「Ifステートメント」と合わせて複数の条件を指定することもできます。

下記のコードでは変数 i が1づつ増加して10になるまで繰り返し処理を実行します。
繰り返し処理の中にIfステートメントで実行条件を指定して5以上の場合に処理を実行するように指定します。

Sub test ()
 Dim i As Integer ‘変数 i を整数型で宣言します
    i = 1 ‘変数 i に1を代入します
   Do While i <= 10 ‘変数 i が10以上になるまで処理を繰り返します
           If i >=5 Then ’変数 i が5以上の場合に処理を実行します 
   MsgBox i & “回目の処理です” ’変数 i の値をメッセージ画面に表示します
           End if
           i = i + 1 ’変数 i に1を加算します
   Loop
End Sub

まとめ

今回は、Do~Loopステートメントの基本的な使いかたから応用までを紹介しました。

For~Nextステートメントよりは使用頻度は落ちますが、必ず使用するステートメントなので

繰り返し使って覚えていきましょう!

For~Nextステートメントを覚えたい場合は下記の記事を参考にしてください。

【VBA】For~Nextステートメントをマスターしよう!【基本~応用まで】

For~Eachステートメントを覚えたい場合は下記の記事を参考にしてください。

【VBA】For~Eachステートメントをマスターしよう!【基本~応用まで】

NO IMAGE
最新情報をチェックしよう!