第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がなければ無限ループになってしまいます。