プログラミング

プログラミングに関するフォーラムです。VBAは除きます。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(指定なし : 指定なし)
Do Until Loop と Do While Loopの違い
投稿日時: 17/04/15 09:28:21
投稿者: hisayanxp

Do Until Loopの記述
たす数が10になるまでたし続け合計は55になります。
 
Dim i,z
Do Until i = 10
   i = i + 1
   z = z + i
Loop
   MsgBox z
 
Do While Loopの記述
合計が10になるまでたし続けたときのiの値の最大値を求めようとしますがうまくいきません。以下の式以外に考え付きません。どのようにすれば良いでしょうか?
Dim i,z
Do While z = 10
   i = i + 1
   z = z + i
Loop
MsgBox i

回答
投稿日時: 17/04/15 13:39:46
投稿者: hatena
投稿者のウェブサイトに移動

Until は条件式がTrue になるまで、繰り返す
 
While は条件式がTrueの間は(つまりFalseになるまで)繰り返す
 
意味が異なります。
 
 

引用:
合計が10になるまでたし続けたときのiの値の最大値を求めようとしますがうまくいきません。

これは、「なるまで」の条件ですから、Until にしないと駄目ですね。
 
    Dim i, z
    Do Until z = 10
        i = i + 1
        z = z + i
    Loop
    MsgBox i
 
 
これでメッセジボックスに 4 と表示されます。
 
ただ、この場合、たまたま 10 になったのでいいですが、10 にならない場合無限ループに陥りますので、危険なコードですね。
例えば、下記のよう z に初期値を設定すると、10にならないので無限ループになります。
 
 
    Dim i, z
    z = 1
    Do Until z = 10
        i = i + 1
        z = z + i
    Loop
    MsgBox i
 
 
これを考慮すると、例えば下記のようなコードにするといいですね。
 
    Dim i, z
     
    z = 1
    Do Until z >= 10
        i = i + 1
        z = z + i
    Loop
     
    If z = 10 Then
        MsgBox i & "回目で10になりました。"
    Else
        MsgBox "10にはなりません。"
    End If

回答
投稿日時: 17/04/15 13:43:19
投稿者: hatena
投稿者のウェブサイトに移動

念のために補足。
 
上記の無限ループのコードを実行してしまって、無限ループに陥った場合は、Ctrl + Break を押すと中断できます。

投稿日時: 17/04/17 07:49:07
投稿者: hisayanxp

hatenaさん
ありがとうございました。全部やってみました。うまくいきました。