アプリ版:「スタンプのみでお礼する」機能のリリースについて

下記のような例文がありますが、 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

A 回答 (4件)

つまり「ずっとループ」ってことです。


ループの入り口や出口で継続判断をせず、ループ内で判断をする場合の方法です。

単純に
Do
' ループ内の処理
Loop
とも書けますが、ループ処理のコードが長い場合、一度に Do と Loop を見渡すことが出来ませんので、Do の行を見ただけで「終了判断は中でやってるんだろうな」と理解できるように Do の行で意味のない (1) を書いています。
    • good
    • 0
この回答へのお礼

なあるほどぉ!

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

お礼日時:2006/03/06 15:17

s_husky です。



回答にミスが!For-Next文です。
    • good
    • 1
この回答へのお礼

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

お礼日時:2006/03/06 15:23

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文を使おうということでしょう。
    • good
    • 1
この回答へのお礼

> For文には無限ループを指定することができません。
> ならば、Do While (条件) - Loop文を使おうということでしょう。

ははぁ~ん!よ~くわかりました。
有難うございます。

お礼日時:2006/03/06 15:22

>括弧1の意味がわかりません。


「常に真(TRUE)」です。

このプログラムでは Exit Do でループから抜けることを前提にしていて Exit Do が実行されない場合には無限にループが続きます。


ちなみに、もし無限ループ状態になってプログラムが止まらなくなっても Ctrl + Break のキー操作で強制終了できます。
    • good
    • 0
この回答へのお礼

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

お礼日時:2006/03/06 15:20

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!