先日職場の勉強会で、繰り返し処理を行う場合の方法について説明があった。
- Do ~ Loop は、条件が分かっている時に適している
- For ~ Next は、範囲が分かっている時に適している
なるほど、これは端的で分かり易い説明だ。
折角の分かり易い説明を、敢えて分かりにくくパチンコに例えてみる。結婚を機にパチンコを止めて10年余。思い出して書いてみると、こんな感じか。
条件が分かっている場合のループ。条件は、大当たりが出るまで。
Sub パチンコ_1() Dim 所持金 As Currency 所持金 = 10000 Dim 大当たり As Boolean 大当たり = False Do While 大当たり = True 所持金 = 所持金 - 1000 大当たり = 勝負(投入金額:=1000) If 大当たり = True Then Dim 心の声 As VbMsgBoxResult 心の声 = MsgBox("まだ勝負しますか?", vbOKOnly, "止め時?") If 心の声 = vbOK Then 大当たり = False Else 大当たり = True End If 所持金 = 所持金 + ドル箱1個分 End If If 所持金 <= 0 Then Exit Do Loop End Sub
範囲が分かっている場合のループ。今回は、全投入額を10,000円と決めてる場合。
Sub パチンコ_2() Dim 所持金 As Currency 所持金 = 10000 Dim 投入金額 As Currency 投入金額 = 1000 Dim 大当たり As Boolean 大当たり = False Dim i As Long For i = 1 To 所持金額 / 投入金額 所持金 = 所持金 - 投入金額 大当たり = 勝負(投入金額) If 大当たり = True Then 所持金 = 所持金 + ドル箱1個分 End If Next End Sub
殆どの方は恐らく、前者のサブプロシージャに違いない。こう書いてみると、恐ろしい。パチンコを止めて良かったと、改めて思いました。
参考まで。