条件分岐を使いこなそう。

マクロで処理をするとき、条件によって処理する内容を変えたいときがあります。
そのときに使うのが、IF文やSelect Case文です。

1.基本は、IF文。

条件分岐の基本は、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は文字)も違います。

2.Select Case文で、場合分けをする。

条件分岐をさせるのに、判断するものが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つの変数しか扱うことができません。 

3.Select Case文で、さらに整理する。

比較をするとき、等号で比較する場合は、さらに見やすく書くことができます。
下のプロシージャは、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も、カンマで区切って並べました。


こうすることで、非常にすっきりとして見やすくなりました。