【VBAリファレンス】VBA練習問題練習問題5(ElseIfとSelect Caseの練習)

スポンサーリンク

VBAにおける条件分岐の極意:ElseIfとSelect Caseの使い分け

Excel VBAの実務において、条件分岐はプログラムの心臓部と言っても過言ではありません。「もし〜ならばA、そうでなければB」という単純なIf文だけでは、複雑な業務要件をさばくことは不可能です。本記事では、条件分岐の二大巨頭である「ElseIf」と「Select Case」に焦点を当て、それぞれの特性、使い分けの基準、そして保守性の高いコードを書くためのテクニックを詳細に解説します。

ElseIf文の構造と特性

ElseIf文は、複数の条件を順番に評価していく際に使用します。上から順に条件式を判定し、最初にTrueとなったブロックのみが実行されるという性質を持っています。

ElseIfの最大のメリットは、「範囲指定」や「論理演算(And, Or)」を柔軟に扱える点です。例えば、「AかつBならば」「AまたはBならば」といった複雑な条件式は、Select CaseよりもIf-ElseIfの方が直感的に記述できます。

一方で、条件が5つ、6つと増えていくと、コードの可読性が著しく低下するという欠点があります。「Ifのネスト(入れ子)」が深くなればなるほど、どこで条件が閉じているのかを追うのが困難になり、バグの温床となります。

Select Case文の構造と特性

Select Case文は、一つの変数の値を複数の候補と比較する際に真価を発揮します。コードの見た目が非常にスッキリするため、条件分岐の対象が単一の変数である場合、プロのエンジニアは迷わずこちらを選択します。

Select Caseの強みは、条件式が「値」であるため、読み手が「何を判断基準にしているか」を一目で理解できる点にあります。また、`Is`キーワードや`To`キーワードを使用することで、数値の範囲指定も非常にエレガントに記述可能です。

サンプルコード:ElseIfとSelect Caseの比較

以下の例では、セルの値(点数)に基づき、成績(評価)を判定する処理を実装しています。


' --- ElseIfを使用した例 ---
Sub EvaluateScore_ElseIf(score As Integer)
    Dim result As String
    
    If score >= 90 Then
        result = "優"
    ElseIf score >= 70 Then
        result = "良"
    ElseIf score >= 50 Then
        result = "可"
    Else
        result = "不可"
    End If
    
    MsgBox "成績は: " & result
End Sub

' --- Select Caseを使用した例 ---
Sub EvaluateScore_SelectCase(score As Integer)
    Dim result As String
    
    Select Case score
        Case Is >= 90
            result = "優"
        Case 70 To 89
            result = "良"
        Case 50 To 69
            result = "可"
        Case Else
            result = "不可"
    End Select
    
    MsgBox "成績は: " & result
End Sub

このコードを見るとわかる通り、範囲指定が明確な場合はSelect Caseの方が意図が伝わりやすく、メンテナンス性も高いことがわかります。

実務における選択の基準とベストプラクティス

実務でコードを書く際、どちらを採用すべきか迷ったときは、以下の「判断基準リスト」を参考にしてください。

1. 条件式が「変数 = 値」の形をしているか?
– Yesならば:Select Case一択です。
– Noならば:ElseIfを検討します。

2. 条件が「範囲」か「特定の集合」か?
– 連続する数値範囲であればSelect Caseの`To`や`Is`が適しています。
– 複雑な論理演算(例:`If (x > 10 And y < 5) Or z = "Error" Then`)が必要な場合はElseIfを使用します。 3. 条件分岐の数はいくつあるか? - 3つ程度までならどちらでも構いませんが、4つ以上ある場合はSelect Caseの方が構造的に美しくなります。 プロフェッショナルなエンジニアが意識すべきは「将来の修正コスト」です。例えば、判定基準が変更になった際、ElseIfで書かれた長いコードを修正するのは非常に神経を使います。一方、Select Caseであれば、Case文を一行追加・修正するだけで済み、ミスの発生確率を大幅に下げることができます。 また、条件分岐を書く際のテクニックとして「早期リターン」も推奨します。条件を満たした時点で処理を終了させ、不要なElseIfを重ねないようにすることで、コードのインデントを浅く保つことができます。

実務アドバイス:コードの可読性を守るために

現場でよく見かける残念なコードの典型例が、「ElseIfの乱用」です。10個もの条件をElseIfで並べると、IDE(VBAエディタ)の画面をスクロールしなければならず、処理の流れを把握するのに多大な脳内リソースを消費します。

もし、条件が非常に多い(10個以上ある)場合は、条件分岐そのものをコードに書くのではなく、「設定シート」を作成し、VLookup関数やDictionaryオブジェクトを使って判定させることを検討してください。コード内にロジックをハードコーディングするのではなく、データとして外部化することで、プログラムの修正なしで要件変更に対応できる「疎結合な設計」が可能になります。

まとめ

VBAにおける条件分岐は、単に動けば良いというものではありません。後からコードを読むメンバー、あるいは半年後の自分自身が、瞬時に処理の流れを理解できるコードこそが「高品質」と呼ぶにふさわしいものです。

– ElseIfは「論理演算を伴う複雑な条件」に使う。
– Select Caseは「単一変数の値による分岐」に使う。
– 4つ以上の分岐がある場合は、Select Caseの採用を優先する。
– 複雑すぎる分岐は、コードではなくデータとして管理する。

これらを意識するだけで、あなたの書くVBAコードは劇的に洗練されます。練習問題として、まずは簡単な評価判定から始め、徐々に条件を複雑にしながら、どちらの書き方が適しているかを試行錯誤してみてください。理論と実践の反復こそが、ベテランエンジニアへの最短ルートです。

タイトルとURLをコピーしました