ExcelVBA入門第6回 If ~ End Ifステートメント
少し複雑なものをつくろうとすると、○○のときはこの処理、××のときはあの処理といった条件分岐が必要になってきます。If(もしも)、Else(その他)で処理を分けて書きます。
条件分岐の基本
基本式
このように記述します。If(もしも)「条件1」then(だったら)、End If(もしも終わり)までの処理を実行すると意味になります。式を満たさない場合はスルーします。
例
Sub Test() If Range("A1") = 1 Then MsgBox "A1セルに1が入っています" End If End Sub
このようなコードを書いてみます。この場合、A1セルに1が入っているとメッセージが表示されます。
このような状態になります。A1セルに1以外のもの、もしくは何も入っていない場合は何も起こりません。(メッセージは表示されません)
処理がひとつで済む場合はEnd ifを省略できる
条件に対して実行したい処理がひとつだけの場合は、下記のように書くとEnd Ifを省略することができます。
Sub Test() If Range("A1") = 1 Then MsgBox "A1セルに1が入っています" End Sub
処理が複数行ある場合や、これより下で紹介するElse(それ以外)を使う場合はEnd Ifは省略できません。
Else(それ以外)を追加する
基本式
If(もしも)「条件1」then(だったら)条件1の処理、Else(それ以外)はそれ以外の処理を実行する、という意味になります。
例
Sub Test() If Range("A1") = 1 Then MsgBox "A1セルに1が入っています" Else MsgBox "条件を満たしません" End If End Sub
このようなコードを書いてみます。
A1セルに1が入っていれば上の図と同じ状態になりますが、それ以外はこのような状態になります。
違う条件も追加する
基本式
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
前回のようにプレイクポイントを設置して実行してみると、条件を満たした時だけ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 はエラー処理にも良く使います!
ほかの入門記事はこちら
- ExcelVBA入門第0回 始める前に
- ExcelVBA入門第1回 動かしてみる
- ExcelVBA入門第2回 とりあえず覚えておくべきこと
- ExcelVBA入門第3回 変数の宣言
- ExcelVBA入門第4回 RangeとCells
- ExcelVBA入門第5回 ステップ実行
- ExcelVBA入門第6回 If ~ End Ifステートメント
- ExcelVBA入門第7回 インデントとコメントアウト
- ExcelVBA入門第8回 繰り返し処理
- ExcelVBA入門第9回 5種類のモジュールの違い
- ExcelVBA入門第10回 3種類のプロシージャと命名規則
- ExcelVBA入門第11回 スコープ(適用範囲)
- これからExcelのマクロを始めたいという方に!簡単な練習問題作りました。
- 私がExcelVBAでよく使う便利なコード・スニペットまとめ
- プログラム初心者さんへ贈る、エラーが起きたら試してみて欲しいこと
- ExcelVBAのクラスモジュールって何?という人向けの使い方まとめ
書籍を執筆しています。
コメントは承認制ですので、反映までしばらくお待ち下さい。(稀にスパムの誤判定にて届かないこともあるようですので、必要な際はお問い合わせからお願い致します。)
YouTubeでQ&Aコンテンツを企画しています
運営しているYouTubeチャンネルで、ご相談やご質問を募集しています。動画のコメントやお問い合わせページからお気軽にご相談をお寄せください。