第7講 Do While〜Loop文(繰り返し処理2)
第5話 Do While〜Loopループの強制的脱出
和が1,000を超えない奇数の和の最大値
(1から奇数を足していって、合計が1,000を超える直前で足すのをやめたときの和)
と最後に足した奇数を求めるプログラムを考えてみましょう。

Private Sub CommandButton1_Click()

    Dim i As Integer, wa As Integer

    Cells(5, 1) = "1,000を超えない奇数の和の最大値と最後に加えた奇数"
    wa = 0
    i = 1
    Do While wa <= 1000
        If wa + i > 1000 Then Exit Do
        wa = wa + i
        i = i + 2
    Loop

    Cells(6, 1) = wa
    Cells(7, 1) = i - 2

End Sub

If wa + i > 1000 Then Exit Doは、wa + i > 1000なら、
強制的にループを抜ける命令です。
強制的にループを抜けるときには、
Exit Doとすればいいのです。

For〜Nextループを強制的に抜けるときはExit Forです。
For〜Next文で同様なプログラムを書くと、

Private Sub CommandButton1_Click()

    Dim i As Integer, wa As Integer

    Cells(5, 1) = "1,000を超えない奇数の和の最大値と最後に加えた奇数"
    wa = 0
    For i = 1 To 1000 Step 2
        If wa + i > 1000 Then Exit For
        wa = wa + i
    Next

    Cells(6, 1) = wa
    Cells(7, 1) = i - 2

End Sub

iの範囲を1000までにしているのは、
最後の奇数がわからないので、
明らかに奇数の和が1000を超えるものを選んだのです。
和が1000を超えるものなら何でもいいので、
例えば10000でもよかったわけです。
少し大きめのものを選んでおくのがコツです。

また、さきのDo While〜Loop文は次のように書き直すこともできます。
Private Sub CommandButton1_Click()

    Dim i As Integer, wa, s As Integer

    Cells(5, 1) = "1,000を超えない奇数の和の最大値と最後に加えた奇数"
    wa = 0
    i = 1
    s = 1
    Do While s
        If wa + i > 1000 Then Exit Do
        wa = wa + i
        i = i + 2
    Loop

    Cells(6, 1) = wa
    Cells(7, 1) = i - 2


End Sub


ちょっとわかりにくいかも知れませんが、
wa <= 1000
といった条件式には、0か1の値をコンピュータは与えているのです。
条件式が正しいときは1、
正しくないときは0を与えてるのです。
だから、
Do While s
   ・
   ・
   ・
Loop
はsが1の間は実行しなさいという命令なのです。
今回のプログラム
s = 1
Do While s
    If wa + i > 1000 Then Exit Do
    wa = wa + i
    i = i + 2
Loop   
はsが0になる機会がないので、Exit Doがなければ無限ループになってしまいます。     


第4話へ 第8講1話へ

講義トップへ

数学研究室に戻る