VBA講義室 > コードの構造化 > 条件分岐
条件分岐
条件分岐はマクロの記録では作成できない。
- IF ステートメント
もし 条件A が X であるなら処理 A を実行、そうでないなら B を実行。
- Select Case ステートメント
値X が X1 のときは処理 Y1、X2 のときは処理 Y2・・・・
ひとつの値の評価に対して複数の分岐が伴うものはSelect Case ステートメントが適している。分岐が少ない場合にはIF ステートメントが適している。分岐条件が複雑であったり、また、評価すべき値が複数である場合には、これらを組み合わせたネスト(入れ子)構造にすることで対処する。
正確には「If...Then...Else ステートメント」。
条件判断の結果に基づいて、処理を分岐。
単行形式構文は、短く簡単な条件判断を行うときに使用。
[ ]は省略可能であることを示す。
If condition Then [
statements] [
Else] [
condition-n] [
elseifstatements-n]
- If...Then ステートメントで、コロン (:)で区切って複数のステートメントを実行することが出来る。
- Then と同じ行にコメント以外のものがあると、単一行形式のステートメントとして扱われる。
単行形式構文より複雑な分岐が必要な場合に使用。
[ ]は省略可能であることを示す。
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
- 必ず指定。
- 真 (True) または、偽 (False) を返す論理式を指定。
- statements
- 単行形式でElse節を含まない場合は、必ず指定。
- 引数 condition が真 (True) の時、実行するステートメントを指定。
- コロン (:) で区切られた一連のステートメントを指定。
- condition-n
- elseifstatements-n
- 省略可能。引数 condition-n が真 (True) の時、実行するステートメントを指定。
- elsestatements
- 省略可能。Else 以前の condition condition-n がどれも偽 (False) であるときに実行されるステートメントを指定。
conditionに指定する式には、[ TypeOf オブジェクト Is オブジェクト型 ]形式の式を指定することも出来る。この場合、TypeOf には、オブジェクト型以外は指定できない。
条件式の値によって実行するステートメントを選択するフロー制御ステートメント。
Select Case testexpression
[
Case expressionlist-n
[
statements-n]] ...
[
Case Else
[
elsestatements]]
End Select
- testexpression
- expressionlist-n
- statements-n
- 省略可能。testexpression が expressionlist-n に合致する Case 節の statements-n のステートメントが実行される。
- elsestatements
- 省略可能。引数 testexpression が Case 節のいずれとも一致しないとき、elsestatements のステートメントが実行される。
testexpression が複数の Case 節に一致する時、最初に一致した Case 節に続くステートメントだけが実行される。Case Else ステートメントは必ずしも必要ではない。Case Else ステートメントがない場合で、 testexpression がどの Case 節の expressionlist とも一致しない場合には End Select の次のステートメントへ実行が移る。
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 ステートメントが必要。
前(コードの構造化) 目次 次(繰り返し処理)