ExcelVBA入門第6回 If ~ End Ifステートメント

ExcelVBA入門第6回 If ~ End Ifステートメント

少し複雑なものをつくろうとすると、○○のときはこの処理、××のときはあの処理といった条件分岐が必要になってきます。If(もしも)、Else(その他)で処理を分けて書きます。


条件分岐の基本

基本式

120207-1

このように記述します。If(もしも)「条件1」then(だったら)、End If(もしも終わり)までの処理を実行すると意味になります。式を満たさない場合はスルーします。

Sub Test()
  If Range("A1") = 1 Then
    MsgBox "A1セルに1が入っています"
  End If
End Sub

このようなコードを書いてみます。この場合、A1セルに1が入っているとメッセージが表示されます。

120207-2

このような状態になります。A1セルに1以外のもの、もしくは何も入っていない場合は何も起こりません。(メッセージは表示されません)

処理がひとつで済む場合はEnd ifを省略できる

条件に対して実行したい処理がひとつだけの場合は、下記のように書くとEnd Ifを省略することができます。

Sub Test()
  If Range("A1") = 1 Then MsgBox "A1セルに1が入っています"
End Sub

処理が複数行ある場合や、これより下で紹介するElse(それ以外)を使う場合はEnd Ifは省略できません。

Else(それ以外)を追加する

基本式

120207-3

If(もしも)「条件1」then(だったら)条件1の処理、Else(それ以外)はそれ以外の処理を実行する、という意味になります。

Sub Test()
  If Range("A1") = 1 Then
    MsgBox "A1セルに1が入っています"
  Else
    MsgBox "条件を満たしません"
  End If
End Sub

このようなコードを書いてみます。

120207-4

A1セルに1が入っていれば上の図と同じ状態になりますが、それ以外はこのような状態になります。

違う条件も追加する

基本式

120207-5

If(もしも)「条件1」then(だったら)条件1の処理、ElseIf(それ以外でもしも)「条件2」then(だったら)条件2の処理、Else(それ以外)はそれ以外の処理を実行する、という意味になります。

Sub Test()
  If Range("A1") = 1 Then
    MsgBox "A1セルに1が入っています"
  ElseIf Range("A1") = 2 Then
    MsgBox "A1セルに2が入っています"
  Else
    MsgBox "条件を満たしません"
  End If
End Sub
120207-6

前回のようにプレイクポイントを設置して実行してみると、条件を満たした時だけIfの中へ入っていく様子が非常によくわかります。

条件分岐を使ったInputBoxのエラー処理

こちらの記事で、

Sub Test()
  Dim userMonth As Integer

  userMonth = InputBox("何を入れますか?")
  Range("A1") = userMonth & "月"
End Sub

というコードを紹介しました。このコードは数値以外のものを入力、又はキャンセルすると「型が一致しません」というエラーが出る、ということも書きました。

変数「userMonth」は「Integer(整数)」で宣言しているので、数値以外のもの(キャンセルは「””(文字数0の文字列)」と判定される)が入るとエラーになってしまうんですね。

これを、今回紹介した If ~ End If を使ってエラー処理をしてみます。

Sub Test()
  Dim userMonth As String '文字列として宣言しておく

  userMonth = InputBox("何を入れますか?")

  If userMonth = "" Then '何も入ってなければ
    MsgBox "キャンセルされました。"
  ElseIf IsNumeric(userMonth) = False Then '数値がどうか判定
    MsgBox "数値ではないものが入力されました。"
  ElseIf userMonth < 1 Or 12 < userMonth Then '1~12の中に入っていなかったら
    MsgBox "「月」以外の数値が入力されました。"
  Else 'それ以外だったら
    Range("A1") = userMonth & "月" '目的の処理
  End if
End Sub

いろいろ方法はあると思いますが、こんな形にしてみました。

先に文字列で宣言しておいて、値が入っているか? それは数値か? 1~12までの数字か? それをクリアしたらやっと処理、という形で書いています。

本当なら、更に整数かどうかもチェックすべきなんですが…そこまでやると複雑になりそうなので割愛します。

こんな感じで、If ~ End If はエラー処理にも良く使います!

公開日:2012/02/07

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください

コメントは承認制ですので、反映までしばらくお待ち下さい。(稀にスパムの誤判定にて届かないこともあるようですので、必要な際はお問い合わせからお願い致します。)

YouTubeでQ&Aコンテンツを企画しています

運営しているYouTubeチャンネルで、ご相談やご質問を募集しています。動画のコメントやお問い合わせページからお気軽にご相談をお寄せください。