マクロで処理をするとき、条件によって処理する内容を変えたいときがあります。
そのときに使うのが、IF文やSelect Case文です。
条件分岐の基本は、IF文です。
IF文はあらゆるときに使うことができるので、これだけ知っていればまずOKです。
Sub test() If Range("a1") > 10 Then ←@ MsgBox "項目1が、大きすぎます。" ElseIf Range("b1") = "" Then ←A MsgBox "項目2が、記入されていません。" Else ←B MsgBox "正常です。" End If End Sub |
@ A1の値が10を越えていたら、メッセージを表示します。 A B1に何も書かれていなかったら、メッセージを表示します。 B それ以外の時は、「正常です。」とメッセージを表示します。 |
IF文のよいところは、「どんな条件でも、羅列すれば上から順番に判断して処理していく」ことです。 上の例でいくと、@とAでは、扱うセルも、扱う型(@は数値で、Aは文字)も違います。 |
条件分岐をさせるのに、判断するものが1つだったら、もっと簡単にわかりやすく書くことができます。
Sub test() Select Case Range("A1") ←@ Case Is > 10 ←A MsgBox "項目1が、大き過ぎます。" Case Is < 0 ←B MsgBox "項目1が、小さ過ぎます。" Case Else ←C MsgBox "正常です。" End Select End Sub |
@ ここで、どの変数を扱うか指定します。 A その変数が10より大きければ、メッセージを表示します。 B その変数が0より小さければ、メッセージを表示します。 C それ以外の時は、「正常です。」とメッセージを表示します。 |
Select Case文のよいところは、条件だけを簡潔に書いているので、見やすいことです。 ただし、1つの変数しか扱うことができません。 |
比較をするとき、等号で比較する場合は、さらに見やすく書くことができます。
下のプロシージャは、A1に入っている教科が、低・中・高学年のどれに当てはまるか判断するものです。
そして、1つめの例は、そのままで、2つめの例は、整理して書きました。
Sub Slect文3() Select Case Rnge("A1") Case Is = "国語" MsgBox "低学年・中学年・高学年" Case Is = "社会" MsgBox "中学年・高学年" Case Is = "算数" MsgBox "低学年・中学年・高学年" Case Is = "理科" MsgBox "中学年・高学年" Case Is = "生活" MsgBox "低学年" Case Is = "音楽" MsgBox "低学年・中学年・高学年" Case Is = "図工" MsgBox "低学年・中学年・高学年" Case Is = "家庭科" MsgBox "高学年" Case Is = "体育" MsgBox "低学年・中学年・高学年" Case Is = "" '空欄の時の処理 MsgBox "何もありません。" End Select End Sub |
9教科を、どの学年に当てはまるか判断して、メッセージを表示します。 ただ、ここまで多くなってくると、ちょっと見にくくなってきます。 |
Sub Slect文4() Select Case Range("A1") Case Is = "国語", "算数", "音楽", "図工", "体育" ←@ MsgBox "低学年・中学年・高学年" Case Is = "社会", "理科" ←A MsgBox "中学年・高学年" Case Is = "生活" MsgBox "低学年" Case Is = "家庭科" MsgBox "高学年" Case Is = "" '空欄の時の処理 MsgBox "何もありません。" End Select End Sub |
上のプロシージャは、判断する項目が多くなってきたので、 ここでは、同じ結果を返すものを、まとめてみました。 @のところで、国語・算数・音楽・図工・体育は、共通して、 「低学年・中学年・高学年」とメッセージを返すので、 ,(カンマ) で区切って並べました。 同じように、Aも、カンマで区切って並べました。 こうすることで、非常にすっきりとして見やすくなりました。 |