01-VBA

制御構文|Excel VBA (Part.2)【If Then】基本編 | 現役エンジニア&プログラミングスクール講師

目標

VBAのIf-Thenステートメント(条件分岐)について理解し利用できる

目標の具体的な内容は以下通りです。

  1. If Thenステートメントを読める。
  2. If ThenステートメントのThenを付け忘れしない。
  3. If ThenステートメントのEnd Ifを誤って消しても気づく、追記できる。
  4. 記述できる条件の種類を増やす。
  5. 職場でIf Thenステートメントがでてきても困らない。

「難しく考えない!」が大原則!

書籍やWebサイトでも制御構文を学習する場合、練習用のプログラムとして準備されるものは基本的には文法的な内容や動きに着目した設計になっています。

言い換えると、具体的な利用シーンを想定して学習するのは難しいと言えます。こういったことからも、この分野の学習は、まず「深く考えない」ことが重要です。

学習時のマイルストーンの中に「見たことがある!」を置いておくことはとても重要なことなので、「何に使われるのだろう?」は一旦、考えないようにしましょう。

  1. 「見たことがある!」を経験する
  2. 「何に使われるか?」は考えない

「練習用のプログラムが読める(できれば書ける)」ことが、学習時のひとまずのゴールです。

VBAの条件分岐

条件分岐には2種類ある

VBAで条件分岐を行う場合、その方法は大きく2種類に分けられます。

  1. 【If Thenステートメント】を使用する方法
  2. 【Select Caseステートメント】を使用する方法

今回は【If Thenステートメント】について扱います。

VBAのIf Thenステートメント

If Thenステートメントで扱える条件

If Thenステートメントの基礎学習では「条件」に「○○の値より小さい場合」や「○○の値より大きい場合」のような単純な条件を書くことが多いです。

その他にも、このIf Thenステートメントには以下のような色々な条件を利用することが出来ます。

  1.  セルやダイアログボックスから取得した値(「空」も含む)
  2.  MsgBoxなどのダイアログボックスのボタンの値
  3.  「値の表示形式」や「変数の型の種類」

この記事でも「If Thenステートメント」の動きを理解しやすい「取得した値」でのプログラムを扱っていきます。その他については別の記事で扱ってみようと思います。

If Thenステートメントの文法

If Thenステートメント

条件がひとつで処理は条件にあったときのみ行うパターン

構文*********************
If 条件 Then
条件に合ったときの処理
End If
*********************

次のスクリプトを実行してみます。

If age >= 20 Then
    MsgBox age & "ですね。お酒の購入をしていただけます。"
End If

サンプルプロシージャ

Option Explicit

'conditionalBranchIfという関数名に意味はなく自由な名前を付けることが出来ます。

Sub conditionalBranchIf_1()

    Dim age As Byte
    age = InputBox("注意1" & Chr(10) & _
                   "入力の年齢が20以上の場合のみ" & Chr(10) & _
                   "「お酒の購入をしていただけます。」のコメントが出力されます。" & Chr(10) & _
                   "注意2" & Chr(10) & _
                   "0から255までの数字以外が入力されるとエラーになります。" _
                   , "あなたの年齢を入力して下さい")
    
    If age >= 20 Then
        MsgBox age & "ですね。お酒の購入をしていただけます。"
    End If
    
    MsgBox "終了"
End Sub

実行結果

If Then Elseステートメント

条件がひとつで処理の選択を条件にあうときと、あわないときに分けるパターン

構文*********************
If 条件 Then
条件に合ったときの処理
Else
  条件に合わなかったときの処理
End If
*********************

次のスクリプトを実行してみます。

If age >= 20 Then
        MsgBox age & "ですね。お酒の購入をしていただけます。"
Else
        MsgBox age & "ですね。お酒の販売はできません。"
End If

サンプルプロシージャ

Sub conditionalBranchIf_2()
    Dim age As Byte
    age = InputBox("注意1" & Chr(10) & _
                   "0から255までの数字以外が入力されるとエラーになります。" _
                   , "あなたの年齢を入力して下さい")
    
    If age >= 20 Then
        MsgBox age & "ですね。お酒の購入をしていただけます。"
    Else
        MsgBox age & "ですね。お酒の販売はできません。"
    End If
    
    MsgBox "終了"
End Sub

実行結果

If Then ElseIfステートメント

条件が複数で処理を条件によって分けるパターン

構文*********************
If 条件1 Then
条件1に合ったときの処理
ElseIf 条件2 Then
  条件2に合ったときの処理
ElseIf 条件3 Then
  条件3に合ったときの処理
ElseIf 条件4 Then
  条件4に合ったときの処理
Else
  いずれの条件も合わなかったときの処理
End If
*********************

次のスクリプトを実行してみます。

サンプルプロシージャ

Sub conditionalBranchIf_3()
    Dim age As Byte
    age = InputBox("注意1" & Chr(10) & _
                   "入力の年齢が16以上の場合のみ" & Chr(10) & _
                   "取得できる運転免許の種別が出力されます。" & Chr(10) & _
                   "注意2" & Chr(10) & _
                   "0から255までの数字以外が入力されるとエラーになります。" _
                   , "あなたの年齢を入力して下さい")
    
    If age >= 21 Then
        MsgBox age & "ですね。大型免許を取得できます。"
    ElseIf age >= 20 Then
        MsgBox age & "ですね。中型免許を取得できます。"
    ElseIf age >= 18 Then
        MsgBox age & "ですね。原付免許や普通免許を取得できます。"
    ElseIf age >= 16 Then
        MsgBox age & "ですね。原付免許であれば取得できます。"
    Else
        MsgBox "年齢別取得可能免許の種別について確認を終了します。"
    End If
    MsgBox "終了"
End Sub

実行結果

以下のように表示されます。

今回は以上となります。

初心者も実践で通用!「VBA・VBS」おすすめ書籍5選 | 現役エンジニア&プログラミングスクール講師「VBA・VBS」初心者の方が実践業務の中でそれらを活用しt活躍できるために必要な知識を習得できる書籍を紹介しています。ページの下部には「おすすめのITスクール情報」「おすすめ求人サイト」について情報を掲載中。...

ブックマークのすすめ

「ほわほわぶろぐ」を常に検索するのが面倒だという方はブックマークをお勧めします。ブックマークの設定は別記事にて掲載しています。

「お気に入り」の登録・削除方法【Google Chrome / Microsoft Edge】「お気に入り」の登録・削除方法【Google Chrome / Microsoft Edge】について解説している記事です。削除方法も掲載しています。...
【パソコン選び】失敗しないための重要ポイント | 現役エンジニア&プログラミングスクール講師【パソコン選び】失敗しないための重要ポイントについての記事です。パソコンのタイプと購入時に検討すべき点・家電量販店で見かけるCPUの見方・購入者が必要とするメモリ容量・HDDとSSDについて・ディスプレイの種類・バッテリーの持ち時間や保証・Officeソフト・ウィルス対策ソフトについて書いています。...
RELATED POST
01-VBA

Excel VBA まとめ | 現役エンジニア&プログラミングスクール講師

2023年2月18日
プログラミング学習 おすすめ書籍情報発信 パソコン初心者 エンジニア希望者 新人エンジニア IT業界への就職・転職希望者 サポートサイト Programming learning Recommended schools Recommended books Information dissemination Computer beginners Prospective engineers New engineers Prospective job seekers in the IT industry Support site
01-VBA

初心者も実践で通用!「VBA・VBS」おすすめ書籍5選 | 現役エンジニア&プログラミングスクール講師

2024年1月11日
プログラミング学習 おすすめ書籍情報発信 パソコン初心者 エンジニア希望者 新人エンジニア IT業界への就職・転職希望者 サポートサイト Programming learning Recommended schools Recommended books Information dissemination Computer beginners Prospective engineers New engineers Prospective job seekers in the IT industry Support site
01-VBA

演算子|Excel VBA (Part.4)【比較演算子】条件の発展的な利用(後編)

2022年10月28日
プログラミング学習 おすすめ書籍情報発信 パソコン初心者 エンジニア希望者 新人エンジニア IT業界への就職・転職希望者 サポートサイト Programming learning Recommended schools Recommended books Information dissemination Computer beginners Prospective engineers New engineers Prospective job seekers in the IT industry Support site
01-VBA

Excel VBA の イベント編(Part.4)イベントプロシージャ | 現役エンジニア&プログラミングスクール講師

2022年12月31日
プログラミング学習 おすすめ書籍情報発信 パソコン初心者 エンジニア希望者 新人エンジニア IT業界への就職・転職希望者 サポートサイト Programming learning Recommended schools Recommended books Information dissemination Computer beginners Prospective engineers New engineers Prospective job seekers in the IT industry Support site