TotalTech

フリーランスのプログラマーが、技術情報・ガジェット・仕事術について書いてゆきます。資料価値の高い記事を目指しています。コーヒー好きです。

TotalTech

VB.NETで複数の値の「どれかに一致」を判定する方法

VB.NETで「どれかに一致」を判定する方法

よく、複数の値の「どれかに一致」を判定したいことがあります。

例えば、Excelのファイルを開くプログラムを作っているとします。Excelファイルの拡張子は、

  • .xls
  • .xlsx
  • .xlsm
  • .xlsb

があります。ユーザーが指定したファイルの拡張子が、このどれかに一致するかどうかを判定する必要があります。

そんな時の便利な書き方です。

ext を拡張子とします。


ext = IO.Path.GetExtension(filepath)

Ifで条件を羅列する

まずは、最も単純な書き方です。


If (ext = ".xls") OrElse (ext = ".xlsx") OrElse (ext = ".xlsm") OrElse (ext = ".xlsb") Then
    ' 処理
End If

この書き方のメリットは 柔軟に記述できる ことです。例えば、「拡張子が ".xlsx", ".xlsm", ".xlsb" の時は filepath が "C:\" で始まっていないといけない」とします。


If (ext = ".xls") OrElse 
   (((ext = ".xlsx") OrElse (ext = ".xlsm") OrElse (ext = ".xlsb")) AndAlso (filepath.StartWith("C:\")) Then
    ' 処理
End If

と、柔軟に書くことができます。

デメリットは、条件を羅列するので 記述が冗長になり、可読性に欠ける ことです。

  • メリット: 他の条件が関係する時に、柔軟に記述できる
  • デメリット: 記述が冗長

Select Caseを用いる

次に、Select Case構文を用いる方法です。Caseの後に複数の値を記述できる事を利用します。


Select Case ext
    Case ".xls", ".xlsx", ".xlsm", ".xlsb"
        ' 処理
End Select

Select Case構文を用いて、値を羅列する方法もあります。

この書き方のメリットは 記述が簡潔になる ことです。

デメリットは、Caseを一つしか用いないのに SelectEnd Selectを書かなくてはいけないこと、また インデントが2段下がる ことです。

  • メリット: 記述が簡潔になる
  • デメリット: Case一つのためにSelectEnd Selectを書かなくてはいけない。インデントが2段下がる

配列のContains()関数 を用いる

最後に、{}で配列を作成してContains()関数を用いる方法です。これがオススメの方法です。


If {".xls", ".xlsx", ".xlsm", ".xlsb"}.Contains(ext)
    ' 処理
End If

メリットは、値を羅列するので 記述が簡潔になる ことです。

デメリットは、一致する値を先に、判定する変数を後に書くため、コードと思考の順序が逆になり、慣れないと少し分かりにくい ことです。

  • メリット: 記述が簡潔になる
  • デメリット: 慣れないと少し分かりにくい

まとめ

以上、VB.NETで複数の値の「どれかに一致」を判定する方法、でした。 可読性の高さは、バグを減らし開発効率を上げるために大切なことです。

値がどれかに一致するかどうかを判定するケースは、よく出てきます。Contains()関数を使った方法も、覚えておくと役に立つと思います。

VB.NET型推論を活用する方法については

Ookii.Dialogsで「フォルダーの選択」ダイアログをより便利にするには