• ベストアンサー

エクセルVBAで Do While (1)って?

下記のような例文がありますが、 Do While (1)の括弧1の意味がわかりません。 Stri = "" iCount = 3 '入力データ開始行 Do While (1) If Trim(Sheets("テスト").Range("A" & iCount)) = "" Then Exit Do End If Stri = Stri & Sheets("テスト").Range("G" & iCount) & "," iCount = iCount + 1 Loop 以下のような使い方ならわかるのですが・・・・。 Do While Counter < 20 Counter = Counter + 1 MsgBox Counter Loop

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

つまり「ずっとループ」ってことです。 ループの入り口や出口で継続判断をせず、ループ内で判断をする場合の方法です。 単純に Do ' ループ内の処理 Loop とも書けますが、ループ処理のコードが長い場合、一度に Do と Loop を見渡すことが出来ませんので、Do の行を見ただけで「終了判断は中でやってるんだろうな」と理解できるように Do の行で意味のない (1) を書いています。

merlionXX
質問者

お礼

なあるほどぉ! こういう書き方もあるんですね、勉強になりました。 有難うございます。

その他の回答 (3)

noname#22222
noname#22222
回答No.4

s_husky です。 回答にミスが!For-Next文です。

merlionXX
質問者

お礼

For-Next文ですから、Exit DoじゃなくExit Forですね。はい、わかりました。ご親切に有難うございます。

noname#22222
noname#22222
回答No.3

Do While (条件) - Loop文 は、()内の条件をテストした結果が真であれば処理を繰り返します。 通常は、条件=条件式です。 よって、処理後に行われるテストで、いずれ真から偽へと変化しループを終了します。 (1)と書けば、1=真という約束事ですから、永遠に偽にはなりません。 無限ループする理由です。 さて、Do While (条件) - Loop文は、For Next-End文に置き換えることが可能です。 For I = 3 To 9999   If Trim(Sheets("テスト").Range("A" & iCount)) = "" Then     Exit Do   End If   ・・・・・ Next I この場合、For のループ回数は便宜上 9999 としていますが、実際は未定です。 よって、カウントすべき行が無くなった時点で For ループを抜けています。 このように、どうせループを抜け出す判定を組み込むならば For文は無限ループしても良い訳です。 ところが、For文には無限ループを指定することができません。 ならば、Do While (条件) - Loop文を使おうということでしょう。

merlionXX
質問者

お礼

> For文には無限ループを指定することができません。 > ならば、Do While (条件) - Loop文を使おうということでしょう。 ははぁ~ん!よ~くわかりました。 有難うございます。

回答No.2

>括弧1の意味がわかりません。 「常に真(TRUE)」です。 このプログラムでは Exit Do でループから抜けることを前提にしていて Exit Do が実行されない場合には無限にループが続きます。 ちなみに、もし無限ループ状態になってプログラムが止まらなくなっても Ctrl + Break のキー操作で強制終了できます。

merlionXX
質問者

お礼

なあるほど、常に真(TRUE)ですか。 ためにしにDo While (0)でやってみました。案の定回りません。 こういう書き方もあるんですね、勉強になりました。 有難うございます。

関連するQ&A