Home » いちばんやさしいExcel VBAの教本 » For~Nextで書けるループ処理をあえてDo~Loopで書いてみる

For~Nextで書けるループ処理をあえてDo~Loopで書いてみる

対象:Excel 2010, Excel 2013, Windows版Excel 2016

For~Next文の構文

Excel VBAの場合、Do~Loop文でなければ書けないケースが少ないため、最初に学習するループ処理としてFor~Next文を、拙著『いちばんやさしいExcel VBAの教本』ではおすすめしています。

For~Next文で書けるループ処理をあえてDo~Loop文で書くと、どのようなプロシージャになるのかご紹介しておきます。

Do~Loop文を使ったサンプルマクロ

Lesson 42「For~Next文の基本を学習しましょう」で作成している、B1:B5セルに文字列「合格」を入力するFor~Next文を、Do~Loop文を使って書いてみると、以下のようなSubプロシージャになります。

Sub sample()
 Dim i As Long

 i = 1
 Do
  Range("B" & i).Value = "合格"
  i = i + 1
  If i > 5 Then Exit Do
 Loop
End Sub

ローカルウィンドウで変数iの値がどう変化するのか、Rangeオブジェクトを取得するコード「Range("B" & i)」がどのセルを表すのかを、しっかり意識しながらショートカットキー[F8]でステップ実行してみてください。

Exit DoはDo~Loopを途中でExit指示

Do~Loop文の途中に登場する、
  If i > 5 Then Exit Do
は、拙著p.154のワンポイント「Exit SubでSubプロシージャを途中でExitできる」で解説している「Exit Sub」と仲間の指示です。

「Exit Sub」で、SubプロシージャをExitするのと同様、
「Exit Do」なら、Do~LoopをExitします。

Do~Loop文を使ったサンプルマクロの解説

Do~Loop文の意味を確認しましょう。

For~Next文の場合、Forの行とNextの行の間に書かれている指示が繰り返し実行さるのと同様、Do~Loop文も、Doの行とLoopの行の間の指示が繰り返し実行されます。
上記のSubプロシージャの場合、
  Range("B" & i).Value = "合格"
  i = i + 1
  If i > 5 Then Exit Do
の3行が繰り返されます。

For~Next文の場合は、
  Range("B" & i).Value = "合格"
という1行しか書かれていなかったのに対して、指示が増えています。

増分値

Do~Loop文内の、
  i = i + 1
は、変数iに「1」を加算する指示です。これはFor~Next文の 「Step 1」
  For i = 1 to 5 Step 1
に該当します。

最終値

Do~Loop文内の、
  If i > 5 Then Exit Do
は、iが5より大きくなったらDo~Loop文をExitしなさいという意味です。For~Next文の「To 5」
  For i = 1 To 5 Step 1
に該当する指示です。

初期値

もうひとつのFor~Next文との違いがDo~Loop文に入る前の、
  i = 1
です。これはFor~Next文の「i = 1」
  For i = 1 To 5 Step 1
に該当します。

つまりFor~Next文の場合、
  For i = 1 To 5 Step 1
の1行に書かれていることが、
  i = 1
  Do
   i = i + 1
   If i > 5 Then Exit Do
と、あちこちに分散して書かれることになります。

For~Next文を最初に学習すべき理由

For~Next文ならば、
  For i = 1 To 5 Step 1
と1行にまとめて書かれることが、
  i = 1
  Do
   i = i + 1
   If i > 5 Then Exit Do
と、あちこちに分散して書かれることで、どれかを書き間違える可能性が高く、結果的に無限ループ(ループ処理がいつまで経っても終わらない状況)に陥る危険性も、For~Next文より高いといえます。

そのためExcel VBAで初めてプログラミングを学習する方に、最初に習得すべきループ処理として、For~Next文をおすすめしています。

最終更新日時:2019-12-18 16:08

[スポンサードリンク]

Home » いちばんやさしいExcel VBAの教本 » For~Nextで書けるループ処理をあえてDo~Loopで書いてみる

「いちばんやさしいExcel VBAの教本」の記事一覧

検索


Copyright © インストラクターのネタ帳 All Rights Reserved.

.