【VBA入門】Select Caseで複数の条件分岐(Or/To/Is/Likeも解説)

条件分岐が多い場合に便利 Select Caseステートメント

あなたはExcelVBAの複数の条件分岐で、Select Caseステートメントって使ってますか?

Select Caseステートメントは条件によって処理を分ける数が多い場合に使われます。例えばサイコロの目は1から6までありますが、1から6までの出た目でそれぞれ処理が違う場合などです。

この記事では、Select Caseステートメントについての基礎から、

  • Like演算子を使ったあいまい条件の使い方
  • Andで複数条件を指定する場合


など応用的な内容についても解説していきます!

Select Caseとは(If文との使い分け)

Select Caseステートメントは複数の条件により処理を分岐させたい場合に使用します。

条件により処理を分岐させる構文としてIf文もありますが、If文は分岐の数が少ない場合に使用します。if文では分岐が多くなると読みにくくなるため、分岐の数が多い場合にSelect Caseステートメントが使われます。

if文についてはこちらの記事で詳しく解説しているので、詳しく知りたい方はぜひ確認してください。

VBAのIf文を使いこなそう! 条件分岐の基本をスッキリ解説
更新日 : 2019年9月26日

Select Caseの使い方

文法と基本的な使い方

Select Caseステートメントは以下のように記述します。

Select Case 変数
    Case 条件式1
        処理1
    Case 条件式2
        処理2
    Case Else
        デフォルト(どの条件にも一致しなかった場合)の処理
End Select

変数が条件式と合致するか条件式がTrueの場合に、それ以降の処理を実行します。

条件式がFalseの場合は次の条件式に移ります。どのCaseの条件式にも当てはまらない場合は、Case Else以降の処理を実行します。

それではサンプルコードで確認していきましょう。

Sub macro1()
    Dim str As String
    
    str = "中学生"
    
    Select Case str
        Case "小学生"
            MsgBox "小学生です"
        Case "中学生"
            MsgBox "中学生です"
        Case "高校生"
            MsgBox "高校生です"
        Case Else
            MsgBox "入力が不正です"
    End Select
End Sub

実行結果:
SelectCase01

複数条件(Or)を指定する場合

Caseの条件式を複数指定することができます。複数の条件は以下のように「,」(カンマ)で区切ります。

Case 条件式1, 条件式2, ・・・

条件式のどれかを満たすと、それ以降の処理が実行されます。

サンプルコードで確認していきましょう。

Sub macro2()
    Dim age As Integer
    
    age = 14
    
    Select Case age
        Case 7, 8, 9, 10, 11, 12
            MsgBox "小学生です"
        Case 13, 14, 15
            MsgBox "中学生です"
        Case 16, 17, 18
            MsgBox "高校生です"
        Case Else
            MsgBox "入力が不正です"
    End Select
End Sub

実行結果:
SelectCase01

Toで範囲指定をする場合

Caseの条件式は以下のようにToキーワードを使って範囲を指定することもできます。

Case 下限値 To 上限値

サンプルコードで確認していきましょう。

Sub macro3()
    Dim age As Integer
    
    age = 14
    
    Select Case age
        Case 7 To 12
            MsgBox "小学生です"
        Case 13 To 15
            MsgBox "中学生です"
        Case 16 To 18
            MsgBox "高校生です"
        Case Else
            MsgBox "入力が不正です"
    End Select
End Sub

実行結果:
SelectCase01

Isで比較条件を指定する場合

Isキーワードを使って比較条件を指定することもできます。

Case Is < 値

サンプルコードで確認していきましょう。

Sub macro4()
    Dim age As Integer
    
    age = 5
    
    Select Case age
        Case Is < 7, Is > 18
            MsgBox "7から18までの整数を入力してください"
        Case 7 To 12
            MsgBox "小学生です"
        Case 13 To 15
            MsgBox "中学生です"
        Case 16 To 18
            MsgBox "高校生です"
        Case Else
            MsgBox "入力が不正です"
    End Select
End Sub

実行結果:
SelectCase02

Like演算子を使ったあいまい条件の使い方(ワイルドカード)

以下のようにLike演算子を使って部分的に合致した場合の条件分岐を記述することができます。

Select Case True
    Case 変数 Like 条件式1
        処理1
    Case 変数 Like 条件式2
        処理2
    Case Else
        デフォルト(どの条件にも一致しなかった場合)の処理
End Select

条件式には「*」(アスタリスク)などのワイルドカードを使います。ワイルドカードには以下のようなパターンを指定できます。

パターン説明
?任意の1文字
*任意の数の文字
#任意の1文字の数字(半角)
[charlist]リストcharlistに指定した文字の中の任意の1文字
[!charlist]リストcharlistに指定した文字以外の任意の1文字

サンプルコードで確認しましょう。

Sub macro5()
    Dim str As String
    
    str = "中学"
    
    Select Case True
        Case str Like "小*"
            MsgBox "小学生です"
        Case str Like "中*"
            MsgBox "中学生です"
        Case str Like "高*"
            MsgBox "高校生です"
        Case Else
            MsgBox "入力が不正です"
    End Select
End Sub

実行結果:
SelectCase01

このサンプルコードでは、String型変数strをLike演算子を使ってそれぞれの場合で比較しています。ワイルドカードを使った文字列”中*”とstrのパターンが一致しています。

Like演算子の使い方については、こちらで詳しく解説していますので、ぜひ参考にしてください。

【VBA入門】Like演算子(ワイルドカード、エスケープ、否定)
更新日 : 2019年4月19日

Andで複数条件を指定する場合

Select caseステートメントについて複数条件で分岐する方法についてお伝えしてきました。

Or条件の場合は「,」記号を使ったり、範囲を指定する場合はToキーワードを使用します。また、文字列のパターンに合っているかどうかで条件分岐する場合はLike演算子を使います。

そこで、Andでの複数条件で条件分岐する方法がないか疑問に思かもしれません。しかし、そのような記述はありません。

1変数の数値の場合はToキーワードを使っての範囲指定で十分なので、Andで複数条件を指定する必要はありません。1変数の文字の場合はLike演算子でワイルドカード文字などを使ってパターンマッチングすればいいので、Andで複数条件を指定する必要はありません。

また、複数の変数をAnd条件で条件分岐することはSelect Caseステートメントではできません。もし、複数の変数で条件分岐したい場合ならIf文を使うようにしましょう

If文でのAndやOrなどの論理演算子の使い方については、こちらで詳しく解説していますので、ぜひ参考にしてください。

VBAのIf文を使いこなそう! 条件分岐の基本をスッキリ解説
更新日 : 2019年9月26日

VBA以外の選択肢も

今回解説したVBAの条件分岐が行えると様々な業務が効率化できる大切なスキルではありますが、このままVBAを学び続けるなら親和性のあるプログラミング学習に挑戦してみることもおすすめです。

  • VBAは社内出世など、会社にずっと属していく人のみに必要
  • AIの発達によってVBAで条件を組まなくても良くなる可能性も
  • 人材不足かつ、市場か伸びているのはプログラミング、スキル次第で人生に選択肢が増える

これらの理由から、せっかくVBAというスキルを身につけようとしているなら親和性のあるプログラミングの方が、あなたの人生に選択肢や可能性を増やすのでは?と思います。

でもVBAでも精一杯なのにプログラミング?難しそう。

そんな心配をしているあなたでも大丈夫です。侍エンジニア塾ではあなたの目標や性格を踏まえて適切な講師を配属させていただき、マンツーマンで指導していくため、着実にスキルアップしていくことができます。

また、あなたの目標に対して現在のスキルや興味のある分野から最適な学習カリキュラムを作るフルオーダーメイドカリキュラムを作成いたします。これによりあなたの興味関心と授業のカリキュラムが完全にあった状態で学習できるため、確実に未来に繋がる実感を持ちながら学習ができます。

まずはあなたの興味や関心からおすすめの言語を判定するプログラミング学習診断アプリを受けてみてください。

質問に答えていくだけで、最適な言語やスキルと学習期間を提案いたします。

プログラミング言語診断を受ける

VBAの将来性

VBAのスキルを学んで業務を効率化したい

このように思っている人は多いでしょう。

VBAの用途はさまざまで、

  • VBAのスキルがあれば転職できるのでは?
  • 業務効率化のスキルは需要が高そうだから

などが上げられます。確かに、業務効率化はどこの企業も目指していて、需要が高いように見えます。ただ、VBAを扱えることが強みになるかといわれると、すこし疑問があります。

VBAは基本的にエクセル上でしか使用することができません。しかし、最近では社内書式をスプレッドシートで管理している企業も増えており、今後エクセル自体の需要が少なくなってしまう可能性も考えられます。

そうなってしまうと、VBAを習得しても活躍の場が限られてしまいますよね。そう考えると将来的にVBAの需要はあまり高くないといえます。

ではVBAを学んでいる人はどうすればいいのでしょう。VBAの将来性や今後の対策などをこちらの記事でまとめているのでぜひご確認ください。

VBAより将来的にWebプログラミング言語がおすすめな3つの理由
更新日 : 2019年10月9日

まとめ

ここでは、Select Caseステートメントについて説明しました。Select Caseステートメントは条件によって分岐が多い場合に使うと便利です。

使いこなすことができるように、この記事を何度も参考にして下さいね!

LINEで送る
Pocket

SEからWebエンジニアへ転職した理由

侍エンジニア塾卒業生の小池さんは、以前は社内SEとして約5年ほど勤務していました。しかし業務内容は社内のヘルプデスク対応など、プログラムを書く仕事は全くなかったそうです。

SEながらプログラムを書けない現状に「将来仕事がなくなるんじゃないか」と不安を感じ、プログラミング学習を決意。

弊社スクールで学習し、無事ベンチャー企業のプログラマーとして転職に成功しました。そんな小池さんの学習法や転職体験談を伺いましたので、是非ご覧ください。

「プログラミングができないSEは仕事がなくなる」不安を感じたSEが未経験から転職成功するまで
更新日 : 2019年10月7日

書いた人

長野 透

長野 透

熊本在住のフリープログラマ兼ライターです。C/C++/C#、Java、Python、HTML/CSS、PHPを使ってプログラミングをしています。専門は画像処理で最近は機械学習、ディープラーニングにはまっています。幅広くやってきた経験を活かしてポイントをわかりやすくお伝えしようと思います。
お問合せはこちらでも受け付けています。
[email protected]

おすすめコンテンツ

あなたにぴったりなプログラミング学習プランを無料で診断!

プログラミング学習の効率を劇的に上げる学習メソッドを解説