Home » いちばんやさしいExcel VBAの教本 » 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文の、
  For i = 1 to 5 Step 1
に該当します。

最終値

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

初期値

もうひとつのFor~Next文との違いがDo~Loop文に入る前の、
  i = 1
です。これはFor~Next文の
  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~Next文をおすすめしています。

[スポンサードリンク]

Home » いちばんやさしいExcel VBAの教本 » For~Next文で書ける処理をDo~Loop文で

TrackBack:0

TrackBack URL
[スポンサードリンク]

Home » いちばんやさしいExcel VBAの教本 » For~Next文で書ける処理をDo~Loop文で

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

検索

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

.