エクセルVBAのIf文

<< エクセルVBAのIE制御に利用したステートメント一覧(VBAのIE制御入門) :前の記事

<< エクセルVBAのプログラムの制御構文(VBAの初心者入門) :前の記事

こちらは、エクセルVBAIf~Then~Elseステートメントの解説になります。If文のような条件分岐はエクセルVBAに限らずプログラム言語全般で利用される機能ですので、しっかり覚えましょう。

また、ステートメントとは「命令文」と訳されるようにコンピュータに具体的な動作を指定する最小単位のプログラムです。主にマクロの挙動を制御する構文や文法を指します。通常は1行で完結する部分を指しますが、If~Thenなど複数行にまたがる部分を意味することもあります。

目次

If~Then~Elseステートメントとは

If~Then~Elseステートメントは、If文に設定されている条件式を判定して、その結果が真(True)の場合はThen以降の処理を実行、偽(False)の場合はElse以降の処理を実行するフロー制御ステートメントです。

If 条件式 Then
 条件式が真(True)の場合に実行される処理
Else
 条件式が偽(False)の場合に実行される処理
End If

If 条件式1 Then
 条件式1が真(True)の場合に実行される処理
ElseIf 条件式2 Then
 条件式2が真(True)の場合に実行される処理
・・・
Else
 すべての条件式が偽(False)の場合に実行される処理
End If

構文If condition Then [statements][Else elsestatements]
If condition Then
 [statements]
[ElseIf condition-n Then
 [elseifstatements] ...
[Else
 [elsestatements]]
End If
キーワード省略説明
condition×こちらは必須キーワードです。真偽を評価する数式または文字列式を指定します。また、比較演算子のIs演算子を利用して同じオブジェクト型(Object)であれば真(True)を返し、それ以外の場合は偽(False)を返します。
尚、引数conditionの値がNull値の場合は、偽(False)であると判断されます。
statementsこちらは省略可能です。ただし、If文の省略形(1行で記述)の場合は、必須となりますので、注意が必要です。
例)If a > 5 Then: statements
condition-nこちらは省略可能です。引数conditionと同様に真偽を評価する条件式を記述します。
elseifstatementsこちらは省略可能です。引数condition-nが真(True)の場合に実行される処理になります。
elsestatementsこちらは省略可能です。どの条件式に当てはまらない場合に実行される処理になります。

条件式が数式のIf文サンプルコード


Sub sample()

    Dim a As Integer
    
    a = 10

    If a > 5 Then
    
        MsgBox "変数aは5より大きい"

    Else
    
        MsgBox "変数aは5より小さい"
    
    End If

End Sub

※ドラッグ(スワイプ)すると全体を確認できます。

実行結果

If文を利用した結果

解説

sampleのSubステートメントには引数の設定はされていません。まず、Dimステートメントを利用して変数aに整数型(Integer)を宣言し「10」を代入します。次にIf文の条件式を確認すると比較演算子を利用して「変数aが5より大きい」場合に真(True)を返す設定にしています。

今回は変数aに「10」を代入しており条件式に当てはまるため、If以下の「MsgBox "変数aは5より大きい"」が実行されました。最後はEndステートメントを利用してsampleプロシージャを終了させます。

こちらでは、条件式が真(True)で処理されましたが、変数aに「2」を設定すると条件式が偽(False)と判断され、Else以下の「MsgBox "変数aは5より小さい"」が実行されますのでご確認ください。

条件式がIs演算子のIf文サンプルコード


Sub sample()

    Dim a As Object
    Dim b As Object
    
    Set a = Sheets("Sheet1")
    Set b = Sheets("Sheet1")

    If a Is b Then
    
        MsgBox "オブジェクト変数a,bは同じオブジェクトです"

    Else
    
        MsgBox "オブジェクト変数a,bは同じオブジェクトではありません"
    
    End If

End Sub

※ドラッグ(スワイプ)すると全体を確認できます。

実行結果

Is演算子を利用したIf文の結果

解説

まず、変数a,bオブジェクト型(Object)を宣言し両方とも「Sheet1シート」を参照しています。次にIf文の条件式を確認するとIs演算子を利用してオブジェクト変数a,bが同じオブジェクトの場合に真(True)を返す設定にしています。

今回はオブジェクト変数a,b共に「Sheet1シート」を参照しており条件式に当てはまるため、If以下の「MsgBox "オブジェクト変数a,bは同じオブジェクトです"」が実行されました。

条件式が論理演算子のIf文サンプルコード


Sub sample()

    Dim a As Integer
    Dim b As Integer
    
    a = 10
    b = 5

    If a = 10 And b = 5 Then
        
        MsgBox "変数aは10、変数bは5です"
        
    Else
    
        MsgBox "変数aは10、変数bは5ではありません"
        
    End If

End Sub

※ドラッグ(スワイプ)すると全体を確認できます。

実行結果

論理演算子のIf文の結果

解説

まず、変数a,bに整数型(Integer)を宣言し変数aには「10」変数bには「5」を代入します。次にIf文の条件式を確認すると比較演算子と論理演算子が利用されており「変数aが10かつ変数bが5」の場合に真(True)を返す設定にしています。

今回は条件式に当てはまるため、If以下の「MsgBox "変数aは10、変数bは5です"」が実行されました。このように条件式には複雑な条件を付けることもできますので、条件分岐に応じて利用するようにしましょう。

条件式が複数あるIf文サンプルコード


Sub sample()

    Dim a As Integer
    
    a = 10

    If a = 5 Then
    
        MsgBox "変数aは5です"

    ElseIf a = 10 Then
    
        MsgBox "変数aは10です"
    
    Else
    
        MsgBox "変数aは5でも10でもありません"
    
    End If

End Sub

※ドラッグ(スワイプ)すると全体を確認できます。

実行結果

複数条件のIf文の結果

解説

まず、変数aに整数型(Integer)を宣言し「10」を代入します。次にIf文の条件式を確認すると比較演算子を利用して「変数aが5」の場合に真(True)を返す設定にしています。

今回は変数aに「10」を代入しており条件式に当てはまらないため偽(False)となりますが、次のelseIf文の条件式は「変数aが10」の場合に真(True)を返す設定になっているため、elseIf以下の「MsgBox "変数aは10です"」が実行されました。

このように上から順に条件式に当てはまるかをチェックしていき、真(True)の場合はそれ以下の処理を実行します。

If文を1行で記述するサンプルコード


Sub sample()

    Dim a As Integer
    
    a = 10

    If a = 10 Then: MsgBox "変数aは10です"

End Sub

※ドラッグ(スワイプ)すると全体を確認できます。

実行結果

複数条件のIf文の結果

解説

If文の処理が1つだけの場合は、1行で記述することが可能です。こちらは変数aが「10」の場合に「MsgBox "変数aは10です"」を実行するマクロになります。1行で記述する場合は、以下のようにThenに「:(コロン)」を記述し、その後ろに条件式が真(True)の場合に実行される処理を記述します。

If 条件式 Then: 条件式が真(True)の場合に実行される処理

こちらを確認してお分かりのように1行で記述する場合は、これまでに最後に記述していた「End If」は記述する必要はありません。これにより1行で記述することは可能ですが、可読性が悪くなるので省略しないようにしましょう。

また、処理が1つだけの場合に利用できますので、例えば変数aに「5」を代入して実行しても何も起こりませんので、こちらも一度ご確認ください。ちなみにこちらのサンプルコードを複数行で記述すると以下のようになります。「Else」も省略可能ですので、こちらも覚えておきましょう。


Sub sample()

    Dim a As Integer
    
    a = 10

    If a = 10 Then
        
        MsgBox "変数aは10です"
        
    End If

End Sub

※ドラッグ(スワイプ)すると全体を確認できます。

エクセルVBAのプログラム制御構文一覧

次の記事: エクセルVBAのSelect Caseステートメント >>

Excel VBAでIEを思いのままに操作できるプログラミング術 Excel 2013/2010/2007/2003対応

IEのデータ収集&自動操作のプログラミング本はこの1冊だけ!IEの起動やポップアップウィンドウ、表示を制御する基本的なコードはもちろん、テキストボックスやラジオボタン、表、ハイパーリンクなどのHTML部品を制御する方法など、自動操作に欠かせないノウハウを丁寧に解説。

ExcelのVBAについてのQ&A掲示板

↑ExcelのVBA全般について分からない事があればこちらの掲示板よりご質問ください。

VBAのIE操作入門

↑ExcelのVBAをマスターできたら、エクセルVBAのIE操作にも挑戦してみてください。

目次

VBAのステートメント

こちらでは、エクセルVBAの事例で利用したステートメントをまとめたものです。ExcelのVBAには様々な機能が用意されていますので一度ご確認ください。

VBAのオブジェクト

こちらでは、エクセルVBAの事例で利用したオブジェクトをまとめたものです。ExcelのVBAには様々な機能が用意されていますので一度ご確認ください。

VBAのプロパティ

こちらでは、エクセルVBAの事例で利用したオブジェクトのプロパティをまとめたものです。ExcelのVBAには様々な機能が用意されていますので一度ご確認ください。

VBAのメソッド

こちらでは、エクセルVBAの事例で利用したオブジェクトのメソッドをまとめたものです。ExcelのVBAには様々な機能が用意されていますので一度ご確認ください。

VBAのイベント

こちらでは、エクセルVBAの事例で利用したオブジェクトのイベントをまとめたものです。ExcelのVBAには様々な機能が用意されていますので一度ご確認ください。