【入門編】実務中級者向け:VB.NETにおけるSelect Case文の高度な範囲指定と、複数条件をスマートに記述するパターンマッチング活用術 – Visual Basic (VB / VB.NET)解析バイブル

スポンサーリンク

こんにちは!開発現場で日々、コードの美しさとパフォーマンスを追求している先輩エンジニアです。

Excelのマクロ(VBA)の記録や、決まりきった`If…ElseIf`の長い連鎖を書く段階から一歩抜け出して、「もっとスマートに、もっと読みやすく条件分岐を書きたい!」と思っていませんか?

今回は、VB.NETの`Select Case`文が持つポテンシャルを極限まで引き出し、「範囲指定」や「複数条件のスマートな合わせ技」をマスターするための極意を伝授します。
ここをクリアすれば、あなたの書くVB.NETコードは見違えるほど洗練され、保守性(メンテナンスのしやすさ)が劇的に跳ね上がりますよ。

なぜ `If…ElseIf` の嵐はメンテナンス地獄を生むのか?

業務システムの開発現場でよく見かけるのが、以下のようなコードです。

.net
‘ 【アンチパターン】IfのネストやElseIfの嵐
If score >= 80 And score <= 100 Then grade = "A" ElseIf score >= 60 And score <= 79 Then grade = "B" ElseIf score >= 40 And score <= 59 Then grade = "C" Else grade = "D" End If これでも動きますが、条件が増えたり、判定基準が変わったりした途端にバグの温床になります。「比較対象の変数を何度も書かなければならない」「`And`や`Or`の論理演算子がごちゃ混ぜになり、条件漏れ(境界値のミス)が起きやすい」といった欠点があるからです。 ここで登場するのが、VB.NETが誇る洗練された`Select Case`文です。

1. `To` 演算子によるスマートな「数値・文字範囲」の指定

`Select Case`の真骨頂の一つが、`To`演算子を用いた範囲指定です。先ほどの成績判定を`Select Case`で書き直してみましょう。

.net
Dim score As Integer = 75
Dim grade As String

Select Case score
Case 80 To 100
grade = “A”
Case 60 To 79
grade = “B”
Case 40 To 59
grade = “C”
Case Else
grade = “D”
End Select

Console.WriteLine($”評価: {grade}”)

ここがプロの知見:

  • `80 To 100` のように書くだけで、「80以上かつ100以下(境界値を含む)」の範囲を直感的に表現できます。
  • 比較対象の変数(この場合は `score`)を最初の1回しか書く必要がないため、タイポ(打ち間違い)や変数の書き換え漏れが物理的に発生しなくなります。

さらに、この `To` は数値だけでなく文字(String型)に対しても有効です。

.net
Dim rank As Char = “B”c

Select Case rank
Case “A”c To “C”c
Console.WriteLine(“合格圏内です”)
Case “D”c, “E”c
Console.WriteLine(“要再試験です”)
Case Else
Console.WriteLine(“無効なランクです”)
end Select

文字コード順(ASCII順)に基づいた範囲指定ができるのも、VB.NETの強力な特徴です。

2. `Is` キーワードで「以上・以下・未満」を自由自在に操る

「範囲と言っても、〇〇未満や、〇〇より大きくだよね?」という現場の要件には、`Is`キーワードを組み合わせます。

.net
Dim temperature As Double = 36.8

Select Case temperature
Case Is < 35.0 Console.WriteLine("低体温の恐れがあります") Case 35.0 To 37.4 Console.WriteLine("平熱です") Case Is > 37.5
Console.WriteLine(“発熱しています”)
End Select

ここがプロの知見:

`Case Is < 35.0` のように、`Is` の後に比較演算子( `<`, `>`, `<=`, `>=`, `<>` )を続けることで、`Select Case`の中に柔軟な条件式を埋め込むことができます。
「`Select Case` は単一の値(イコール)しか比較できない」という誤解をしている中級者が非常に多いのですが、この `Is` を使いこなせるかどうかが、VB.NET中級者への分水嶺です。

3. カンマ区切りによる「複数条件のまとめ書き」

「この値、または、あの値のどちらかに合致すれば処理したい」というケースは多々ありますよね。VB.NETでは、`Case` の後ろにカンマ(`,`)で複数の値を並べるだけで、スマートにOR条件を表現できます。

.net
Dim dayOfWeek As String = “土”

Select Case dayOfWeek
Case “月”, “火”, “水”, “木”, “金”
Console.WriteLine(“平日です。お仕事頑張りましょう!”)
Case “土”, “日”
Console.WriteLine(“週末です。ゆっくり休んでください。”)
Case Else
Console.WriteLine(“曜日として認識できません。”)
End Select

これだけでもスッキリしますが、さらに応用として、「値のリスト」と「範囲指定」を同じ `Case` の中で混在させることも可能です。

.net
Dim age As Integer = 17

Select Case age
Case 0, 1 C’ 0歳または1歳(乳児)
Case 2 To 6 ‘ 2歳から6歳(幼児)
Console.WriteLine(“未就学児です”)
Case 7 To 18 ‘ 7歳から18歳(児童・生徒)
Console.WriteLine(“学生です”)
Case Else
Console.WriteLine(“成人またはシニアです”)
End Select

(※上の例の `Case 0, 1` のように、処理を書かずに次の `Case` に流す書き方も、条件をまとめるテクニックの一つです)

陥りがちな罠:VB.NETの `Select Case` は「上から順に評価される」

ここで、C#の `switch` 文(C# 8.0以降のパターンマッチング等)や他の言語から入った人がハマりやすい、VB.NET特有の重要な仕様に触れておきます。

VB.NETの `Select Case` は、上から順に条件評価を行い、最初に一致(True)した `Case` のブロックを実行した時点で、残りの条件判定をスキップして `Select` 全体を抜けます。

したがって、範囲が重複する条件を上に書いてしまうと、下の条件に到達しなくなるという致命的なバグを生みます。

.net
‘ 【やってはいけない例】
Dim score As Integer = 85

Select Case score
Case Is >= 60 ‘ ← ここが先にヒットしてしまう!
Console.WriteLine(“合格です”)
Case 80 To 100 ‘ ← score=85 なのに、ここは絶対に実行されない
Console.WriteLine(“優秀です!”)
End Select

正しい順序の組み立て方:

条件分岐を記述する際は、「より限定的な条件(狭い範囲や特定の値)」を上に書き、「一般的な条件(広い範囲や `Case Else`)」を下に書くのが鉄則です。

.net
‘ 【正しい例】
Dim score As Integer = 85

Select Case score
Case 80 To 100
Console.WriteLine(“優秀です!”) ‘ こっちが先に評価される
Case Is >= 60
Console.WriteLine(“合格です”)
Case Else
Console.WriteLine(“不合格です”)
End Select

この「上から順に評価される」という挙動の裏側(制御フロー)を意識できるようになると、コードのバグを未然に防ぐ確かな目が養われます。

まとめ

今回は、VB.NETの `Select Case` 文を深化させ、実務で即戦力となる範囲指定や複数条件のスマートな書き方を解説しました。

  • `To` 演算子で、数値や文字の範囲を美しく指定する。
  • `Is` キーワードを組み合わせて、大小比較(以上・以下・未満)をスマートに処理する。
  • カンマ(`,`)で複数の値をまとめ、冗長な `Or` を排除する。
  • 「上から順に評価される」というライフサイクル上の特性を理解し、条件の順序に気をつける。

これらを意識するだけで、あなたの書くコードの可読性とメンテナンス性は劇的に向上します。現場のエンジニアたちからも「おっ、分かっているな」と一目置かれる存在になるはずです。

ここをクリアすれば、VB.NETの条件分岐はもう怖くありません。ぜひ明日からの開発現場で試してみてくださいね!

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