次の方法で共有


If...Then...Else ステートメント

の値に基づいて、条件に応じてステートメントのグループを実行します。

構文

ifconditionThen [ statements ] [ Elseelsestatements ]

または、ブロック形式の構文を使用できます。

ifconditionThen
[ statements ]
[ ElseIfcondition-nThen
[ elseifstatements ]]
[ Else
[ elsestatements ]]
End If

If...Then...Else ステートメントの構文には、次の指定項目があります。

パーツ 説明
condition 必須。 次の 2 種類の式の 1 つ以上を指定します。

True または False に評価される数値式または文字列式です。 condition が Null の場合は、conditionFalse として処理されます。

TypeOfobjectnameIsobjecttype という形式の式。 objectname は任意のオブジェクト参照であり、objecttype は任意の有効なオブジェクト タイプです。 objectnameobjecttype で指定されたオブジェクトの種類のいずれかである場合、式は True です。それ以外の場合は False です。
statements ブロック形式では省略可能で、Else 句がない 1 行形式では必要です。 conditionTrueの場合にコロンで区切られる、または実行されるステートメントを指定します。
condition-n 省略可能です。 condition と同じです。
elseifstatements 省略可能。 関連する condition-nTrue の場合に実行されるステートメントを指定します。
elsestatements 省略可能です。 以前の condition または condition-n 式がどれも True でない場合に実行されるステートメントを指定します。

解説

単純な短いテストには、1 行形式 (最初の構文) を使用します。 しかし、ブロック形式 (2 番目の構文) では、1 行形式よりも構造化され柔軟性に富みます。一般的に、読みやすくなり保守とデバッグが簡単になります。

注:

1 行の形式でも、If...Then 判定の結果として実行される複数のステートメントを指定できます。 次のステートメントのように、すべてのステートメントは同じ行にコロンで区切って記述する必要があります。

If A > 10 Then A = A + 1 : B = B + A : C = C + B 

ブロック形式 If ステートメントは行の最初のステートメントである必要があります。 ステートメントの ElseElseIfEnd If の部分には、行番号またはその前の行ラインのみを含めることができます。 ブロック IfEnd If ステートメントで終了する必要があります。

ステートメントがブロック If かどうかを判断するには、Then キーワードの後に何が指定されているかを確認します。 同じ行の Then の後に表示されるコメント以外の場合、ステートメントは 1 行形式の If ステートメントとして処理されます。

Else 句と ElseIf 句は、省略可能です。 ブロック If では必要なだけ ElseIf 句を含めることができますが、Else 句の後には何も表示されません。 ブロック If ステートメントはネストできます。つまりそれぞれに含まれます。

ブロック If (2 番目の構文) を実行するときに、condition がテストされます。 conditionTrue の場合は、Then に続くステートメントが実行されます。 conditionFalse の場合は、代わりに ElseIf で指定した各条件 (ある場合) が評価されます。 True 条件が見つかると、関連する Then の直後のステートメントが実行されます。 ElseIf 条件が True でなければ (または ElseIf 句がなければ)、Else に続くステートメントが実行されます。 Then または Else に続くステートメントを実行した後は、End If に続くステートメントから実行が続けられます。

ヒント

TipSelect Case は、いくつかの可能性のあるアクションを持つ 1 つの式を評価する際にさらに役立ちます。 ただし、 TypeOfオブジェクト名Isobjecttype 句は 、Select Case ステートメントでは使用できません。

注:

TypeOf は、Object 以外の Long、Integer などのハード データの種類では使用できません。

この例では、If...Then...Else ステートメントのブロック形式と 1 行形式の両方を示します。 If TypeOf...Then...Else の使用方法も示します。

Dim Number, Digits, MyString 
Number = 53 ' Initialize variable. 
If Number < 10 Then 
 Digits = 1 
ElseIf Number < 100 Then 
' Condition evaluates to True so the next statement is executed. 
 Digits = 2 
Else 
 Digits = 3 
End If 
 
' Assign a value using the single-line form of syntax. 
If Digits = 1 Then MyString = "One" Else MyString = "More than one" 

If TypeOf 構造を使用して、プロシージャに渡されたコントロールがテキスト ボックスかどうかを判断します。

Sub ControlProcessor(MyControl As Control) 
 If TypeOf MyControl Is CommandButton Then 
 Debug.Print "You passed in a " & TypeName(MyControl) 
 ElseIf TypeOf MyControl Is CheckBox Then 
 Debug.Print "You passed in a " & TypeName(MyControl) 
 ElseIf TypeOf MyControl Is TextBox Then 
 Debug.Print "You passed in a " & TypeName(MyControl) 
 End If 
End Sub

関連項目

サポートとフィードバック

Office VBA またはこの説明書に関するご質問やフィードバックがありますか? サポートの受け方およびフィードバックをお寄せいただく方法のガイダンスについては、Office VBA のサポートおよびフィードバックを参照してください。