Sub check_if_over_50_is_more_than_5()
'50点を超える値が5件以上あるかどうかを調べ、該当する場合は「合格」とする
Dim i
Dim kensu
For i = 2 To 11
If Range("B" & i).Value > 50 Then
kensu = kensu + 1
If kensu > 5 Then
Range("D2").Value = "合格" '即座に処理
Exit For 'Exit For は、即座にくりかえし作業を終了する。発展編1参照。
End If
End If
Next
End Sub
Sub check_if_over_50_is_more_than_5_flag()
'50点を超える値が5件以上あるかどうかを調べ、該当する場合は「合格」とする
'フラグを使った場合
Dim i
Dim kensu
Dim flag
flag = False '[1]
For i = 2 To 11
If Range("B" & i).Value > 50 Then
kensu = kensu + 1
If kensu > 5 Then
flag = True 'フラグをつけるだけ
Exit For
End If
End If
Next
'以下で、フラグを元に処理を行うか判定
If flag = True Then '[2]
Range("D2").Value = "合格"
End If
End Sub
'[1] これはなくてもOKですが(詳しくは発展編1の第1章「変数の初期値」を参照)
'[2] If flag Then でも OK(詳しくは発展編2第1章「式と戻り値」を参照)
szさんの投稿
(投稿ID: 4861)
今回の「フラグ」という概念は、
「if文で条件一致するグループと条件一致しないグループの二つのグループに分けている」ように感じたのですが、
その理解で良いでしょうか?
小川 慶一さんのコメント
(コメントID: 6813)
条件判定をする機能と処理を実行する機能とを分離させたいときにフラグを使います。
条件判定直後に処理を実行させようとすると複雑なコードになってしまう、あるいは、If文内の処理のボリュームが大きすぎになってしまう、といったときに有効な手法です。
以下に、フラグの件だけを抽出したシンプルなマクロを用意してみました。
ゲストさんなら、上の補足説明と以下のサンプルコードだけで意図が伝わるのではないかとも思いますが、どうでしょうか。
szさんのコメント
(コメントID: 6816)
なるほど、条件判定とその後の処理の機能を分離させたい時に便利そうですね。
使い方一つで、ひとつの「変数」にこのような機能がもたせられるのは、奥深いですね。
小川 慶一さんのコメント
(コメントID: 6818)
プログラミング技術の習得というのは、「分離可能なものをより分離していくもの」という側面があります。
その分抽象度もあがりますし注意すべきことも増えます。が、そこを乗り越えると書けるマクロの質、できることの幅もグッとあがります。
ひきつづき、楽しみに学んでください。