VBA講義室 > コードの構造化 > 条件分岐

条件分岐

条件分岐はマクロの記録では作成できない。

ひとつの値の評価に対して複数の分岐が伴うものはSelect Case ステートメントが適している。分岐が少ない場合にはIF ステートメントが適している。分岐条件が複雑であったり、また、評価すべき値が複数である場合には、これらを組み合わせたネスト(入れ子)構造にすることで対処する。

IFステートメント

正確には「If...Then...Else ステートメント」。
条件判断の結果に基づいて、処理を分岐。

【単行形式構文】

単行形式構文は、短く簡単な条件判断を行うときに使用。
[ ]は省略可能であることを示す。


If condition Then [statements] [Else] [condition-n] [elseifstatements-n]

【ブロック形式構文】

単行形式構文より複雑な分岐が必要な場合に使用。
[ ]は省略可能であることを示す。


If condition Then
[statements]
[Elseif condition-1
[elseifstatements-1]]
[Elseif condition-2
[elseifstatements-2]]
 ・
 ・
[Elseif condition-n
[elseifstatements-n]]
[Else
[elsestatements]]
End If

ブロック形式の If ステートメントは、End If ステートメントで終了させる必要がある。
ブロック形式の If ステートメントは、If ステートメントを行の先頭に指定する必要がある。
ステートメント内の Else 節、ElseIf 節、End If 節の前には行番号または行ラベルのみ指定できる。
ブロック形式の If ステートメントは、ElseIf 節はいくつ指定してもかまわない。
Else 節の後ろには ElseIf 節を指定することはできない。
ブロック形式の If ステートメントはネスト (入れ子) 構造にすることができる。

指定項目の説明

【補足】

conditionに指定する式には、[ TypeOf オブジェクト Is オブジェクト型 ]形式の式を指定することも出来る。この場合、TypeOf には、オブジェクト型以外は指定できない。

Select Caseステートメント

条件式の値によって実行するステートメントを選択するフロー制御ステートメント。

【構文】


Select Case testexpression
[Case expressionlist-n
[statements-n]] ...
[Case Else
[elsestatements]]
End Select

引数の説明

testexpression が複数の Case 節に一致する時、最初に一致した Case 節に続くステートメントだけが実行される。Case Else ステートメントは必ずしも必要ではない。Case Else ステートメントがない場合で、 testexpression がどの Case 節の expressionlist とも一致しない場合には End Select の次のステートメントへ実行が移る。

Case 節での引数指定の方法

Case節では複数の式や範囲を指定できる。次に例を示す。
Case 1
基本として単一の値を指定する。この例では1の時だけ、続くステートメントが実行される。
Case 7 To 9
キーワード To を使用して値の範囲を設定できる。この例では7〜9の間の数値である場合、続くステートメントが実行される。
Case Is > 15
比較演算子を使用する場合はキーワード Is を使用する。(比較演算子を使用した場合に自動的に追加される)この例では15より大きい値の場合、続くステートメントが実行される。
Case 11, 13
複数指定するときは、カンマ (,) で区切る。この例では 11、13の場合、続くステートメントが実行される。
Case 7 To 9, 11, 13, Is > 15
上記の混合で指定することも出来る。この例では 7〜9、11、13、15を超える値の場合に続くステートメントが実行される。
Case "test"
文字列を指定する場合には " (ダブルクォーテーション)で囲んで指定する。この例では"test"という文字列の場合続くステートメントを実行する。
Case "aaaa" To "bbbb"
キーワード To を使用して文字列の範囲を指定できる。この場合は文字列の先頭4文字がアルファベット準で並べた時の"aaaa"から"bbbb"の間の文字列である場合に続くステートメントが実行される。ただし検査対象に5文字目以降がある場合は考慮されない。

オブジェクトを比較する演算子 Is と Select Case ステートメントのキーワード Is は、同じものではない。
Select Case ステートメントはネスト (入れ子) 構造にすることがでる。このとき、入れ子にした Select Case ステートメントに対応する End Select ステートメントが必要。


前(コードの構造化) 目次 次(繰り返し処理)


SEO [PR] 爆速!無料ブログ 無料ホームページ開設 無料ライブ放送