「VBAのIF分で複数の条件分岐を行うと、コードが複雑になってよく分からなくなる...」
そんな悩みを抱えていませんか?

・複数の条件をIF文で書くと、コードが複雑になり読みづらい。
・もっとシンプルに条件分岐を管理できる方法はないの?
・数値や文字列の条件によって異なる処理を簡単に書いてみたい。



その場合は、VBAの「Select Case 文」を
使用すると解決します!
この記事では、VBAの Select Case 文を使ったシンプルでわかりやすい条件分岐の方法を解説します。
Select Case 文を使用すると、例えば、複数の条件や文字列を一括して処理したり、ワイルドカードを使ったパターンマッチングも簡単に行えるようになります。
基本的な使い方から、実際の業務で役立つ応用例まで、初心者でもすぐに実践できる内容です。
ぜひ最後までお読みください。
【 この記事の概要 】
よく使う度 | |
難しさ | |
覚えておくと安心度 |
VBAをしっかり学びたいけれど、「どこから始めればいいかわからない」と迷っていませんか?
そんな方には、UdemyのVBA講座がおすすめです。
動画での丁寧な解説や、実践的な学習スタイルで、初心者でも無理なく基礎から応用まで習得できます。
自己学習を進める上で、何度でも繰り返し見返せる講座は非常に心強い味方になりますよ!


\ 自分のペースで学べるVBA講座はこちら /
この記事を見て「できるようになる」こと
- Select Case文の基本を理解する
- Select Case文で比較演算・範囲指定・ワイルドカードの使用方法を確認する
- Select Case文を使用するうえでの注意ポイントを理解する
- Select Case文の使用例を確認する
VBA「Select Case文」の基本を解説
VBAのSelect Case文は、複数の条件をシンプルに整理し、効率よく処理できる構文です。
特に、文字列を扱う際や複数の条件を適用する場合に、その威力を発揮します。
複数の条件を処理する場合、IF文では複雑になりやすく、条件が増えると「ElseIf」が何度も出てきてしまい、コードが読みにくくなります。
しかし、「Select Case文」を使えば、例えば文字列を基準にした条件分岐や、複数の異なる条件を簡潔にまとめることができます。


Select Case文の基本構成
Select Case文の基本構成は以下の通りです。


- Select Case
- 評価対象となる値や式を指定します。
この値に基づき、後述するCaseブロックで分岐が行われます。
- 評価対象となる値や式を指定します。
- Case
- 条件に一致する処理を指定するためのキーワードです。
評価する値が指定した条件に一致する場合、そのブロック内の処理が実行されます。
- 条件に一致する処理を指定するためのキーワードです。
- 条件
- Caseキーワードの後に、評価する値に一致する条件を記述します。
数値、文字列、範囲指定などが可能です。
複数の条件をカンマで区切って指定することもできます。
- Caseキーワードの後に、評価する値に一致する条件を記述します。
- Case Else
- どのCaseにも一致しなかった場合に実行される処理を指定します。
このCase Elseブロックは省略可能ですが、条件外のケースに対応するために使用することが推奨されます。
- どのCaseにも一致しなかった場合に実行される処理を指定します。
- End Select
- Select Caseブロックの終了を示します。
全ての分岐処理が完了したことを明示するために必要なキーワードです。
- Select Caseブロックの終了を示します。
より詳しい情報は、Microsoft公式 – Select Case ステートメントを参照してみてください。
VBA「Select Case」の応用例:複数条件・比較演算・ワイルドカード
Select Case文は、条件を単純に分岐させるだけでなく、「比較演算」や「範囲指定」、さらには「文字列の指定」や「ワイルドカード」にも対応しています。
応用1 : 比較演算子を使う場合 (Isキーワード)
Select Case文で数値の大小比較を行う場合には、「Isキーワード」を使用します。
例えば、次のように記述することで、指定の値が90以上であれば条件を満たす処理が行えます。
Case Is >= 90
この構文により、数値の評価が柔軟に行えるため、条件の範囲を細かく設定したい場合に便利です。
比較演算子の一覧については、以下を参照ください。
比較演算子 | 説明 | 使用例 |
---|---|---|
= | 等しい | Case Is = 90 |
<> | 等しくない | Case Is <> 90 |
< | 小さい | Case Is < 90 |
> | 大きい | Case Is > 90 |
<= | 小さいか等しい | Case Is <= 90 |
>= | 大きいか等しい | Case Is >= 90 |
応用2 : 数値の範囲を指定する場合 (Toキーワード)
特定の数値の範囲内で処理を分岐させる場合、「Toキーワード」を使います。
例えば、「1」から「10」までの数値に一致する場合には、以下のように記述します。
Case 1 To 10
これにより、複数の連続した数値を一度に処理でき、個別に指定する必要がなくなります。
応用3 : 文字列を条件に指定する場合
文字列を条件に指定する場合は、そのまま文字列を記述します。
例えば、名前やコードに基づいて処理を分岐させたい場合、次のように記述できます。
Case "山田", "鈴木"
カンマで区切ることで、複数の文字列条件を一度に指定することが可能です。
応用4 : ワイルドカードを使った文字列比較
Select Case文では、「Like演算子」を使って「ワイルドカード」による文字列パターンマッチングも行えます。
ワイルドカードとは、文字列の一部をあいまいに指定するための記号です。
特定のパターンに一致する文字列を検索したり、条件分岐に使ったりできます。
これにより、特定のパターンに一致する文字列に対して処理を分岐させることが可能です。
Case text Like "A#*"
この例では、「A」で始まる任意の文字列に一致する場合に処理が実行されます。
ワイルドカードの一覧は下記の通りとなります。
ワイルドカード | 説明 |
---|---|
# (シャープ) | 任意の1桁の数字に一致します。 |
* (アスタリスク) | 0文字以上の任意の文字列に一致します。 |
? (クエスチョンマーク) | 任意の1文字に一致します。 |
VBA 「Select Case文」を使用するうえでの注意ポイント
Select Case文を使う際の注意ポイントを以下にまとめます。
注意1 : Caseの重複に注意しましょう
同じ値や条件が複数のCaseブロックに含まれていると、最初に一致した条件のみが処理され、それ以降のCaseは無視されます。
つまり、重複する条件があると、それらが期待どおりに処理されない可能性があります。
Select Case score
Case Is >= 70
MsgBox "70点以上"
Case Is >= 90
MsgBox "90点以上"
End Select
この場合、「score」が「90」の場合でも、最初の「70点以上」という条件に一致するため、「70点以上」が表示され、「90点以上」のメッセージは表示されません。
条件の順番や内容に注意しましょう。
注意2 : Case Elseを活用しましょう
「Case Else」は、どの「Case」にも一致しなかった場合に実行される処理です。
例えば、予期しない値や範囲外の値が入力された場合に対応できます。
また、「Case Else」を使って、条件が一致しない場合に「何もしない」という処理を行うことも可能です。
抜けのない処理を行うために、「Case Else」を使うことが推奨されます。
Select Case score
Case Is >= 90
MsgBox "90点以上"
Case Is >= 70
MsgBox "70点以上"
Case Else
MsgBox "70点未満"
End Select
ここでは、「70点未満」の場合の処理を「Case Else」でカバーしています。
特定の範囲以外の条件にも対応することで、エラーを防げます。
注意3 : 数値と文字列の混同に注意しましょう
VBAでは、「数値」と「文字列」は別のデータ型として扱われます。
「Select Case文」で条件を指定するときは、数値と文字列が混ざらないように注意しましょう。
意図せず数値を文字列として扱ったり、その逆をしてしまうと、期待した結果にならないことがあります。
Select Case userName
Case 123
MsgBox "これは数値"
Case "123"
MsgBox "これは文字列"
End Select
上記の例では、「数字の123」と「文字列の”123″」は別の条件として扱われます。
型の違いを理解して、正しい形式で記述しましょう。
注意4 : パフォーマンスの最適化について
「Select Case文」は条件を簡潔に整理できる便利なツールですが、条件が多すぎる場合や処理が複雑すぎる場合には、コードのパフォーマンスに影響が出ることがあります。
特に、大量の条件を一度に処理する場合や、複雑な比較演算を多用する場合は、コードの効率性に気を配る必要があります。
- 対策
- 条件を適切にグループ化し、重複を避ける。
- 可能であれば、処理を分割してシンプルな構造にする。
VBA「Select Case文」の使用例をご紹介
それでは、Select Case文の具体的な使用例を見ていきましょう。
以下に紹介する使用例は、すべてコピペしてすぐに実行できるコードです。
気になる例は、ぜひご覧いただき、実際に実行してみてください。
VBAの基礎から応用までを効率よくしっかり学習したい方には、UdemyのVBA講座もおすすめです。
特に自己学習で進める場合、ビデオや実践例があると理解が進みやすくなります。


\ 自分のペースで学べるVBA講座はこちら /
使用例1:比較演算子を使用した数値の条件分岐 (Isキーワード)
Select Case文を使って、数値が特定の値以上かどうかを条件として判定する方法を紹介します。
この例では、セルA1に入力された点数に基づいて、成績評価を表示します。
Sub CheckGrade()
Dim score As Long
score = Range("A1").Value
Select Case score
Case Is >= 90
MsgBox "成績はAです"
Case Is >= 80
MsgBox "成績はBです"
Case Is >= 70
MsgBox "成績はCです"
Case Else
MsgBox "成績はDです"
End Select
End Sub
処理結果


コードの動作概要
Range(“A1”).Valueによって、セルA1に入力されている数値を取得し、変数「score」に代入しています。
これが判定に使用される点数になります。
Select Case scoreにより、変数「score」の値に応じて条件分岐が行われます。
以下の条件が設定されています。
90点以上: 成績は「A」
80点以上90点未満: 成績は「B」
70点以上80点未満: 成績は「C」
それ未満: 成績は「D」
各条件に一致した場合、対応するメッセージボックスが表示され、ユーザーに成績が通知されます。
このコードで使用している機能
1行ずつコードを解説
「クリック」してコードの詳細解説を見る
- Sub CheckGrade()
- この行では、Subステートメントを使って新しいプロシージャ「CheckGrade」を定義しています。
Subは一連の処理をまとめるための構文で、ここでは点数を評価し成績を表示する処理が行われます。
- この行では、Subステートメントを使って新しいプロシージャ「CheckGrade」を定義しています。
- Dim score As Long
- Dimステートメントを使って、「score」という変数をLong型(長整数)として宣言しています。
この変数は後でセル「A1」の値(点数)を格納するために使われます。
Long型は、整数値を扱うためのデータ型です。
- Dimステートメントを使って、「score」という変数をLong型(長整数)として宣言しています。
- score = Range(“A1”).Value
- Range(“A1”).Valueによって、セル「A1」に入力されている値を取得し、それを変数「score」に代入しています。
この「score」の値が成績を判定するための基準となります。
- Range(“A1”).Valueによって、セル「A1」に入力されている値を取得し、それを変数「score」に代入しています。
- Select Case score
- Select Case文を使って、変数「score」に基づく条件分岐を開始します。
ここで、「score」の値がどの範囲に該当するかによって処理を分岐させます。
- Select Case文を使って、変数「score」に基づく条件分岐を開始します。
- Case Is >= 90
- この行では、「score」が「90以上」の場合に、この条件が成立します。
「Is >=」は、指定した値以上かどうかを判定するための比較演算子です。
「score」が「90以上」であれば、このブロック内の処理が実行されます。
- この行では、「score」が「90以上」の場合に、この条件が成立します。
- MsgBox “成績はAです”
- MsgBoxはメッセージボックスを表示する関数で、ここでは「成績はAです」というメッセージが表示されます。
このメッセージは、「score」が「90点以上」だった場合に実行されます。
- MsgBoxはメッセージボックスを表示する関数で、ここでは「成績はAです」というメッセージが表示されます。
- Case Is >= 80
- 次に、「score」が「80以上90未満」の場合、この条件が成立します。
「80点以上」の点数が入力されていると、このブロックの処理が実行されます。
- 次に、「score」が「80以上90未満」の場合、この条件が成立します。
- MsgBox “成績はBです”
- この場合は、「成績はBです」というメッセージボックスが表示されます。
「score」が「80点以上90点未満」の場合に、このメッセージが表示されます。
- この場合は、「成績はBです」というメッセージボックスが表示されます。
- Case Is >= 70
- 次に、「score」が「70以上80未満」の場合、この条件が成立します。
「70点以上」の点数が入力されていると、このブロックの処理が実行されます。
- 次に、「score」が「70以上80未満」の場合、この条件が成立します。
- MsgBox “成績はCです”
- この場合は、「成績はCです」というメッセージボックスが表示されます。
「score」が「70点以上80点未満」の場合に、このメッセージが表示されます。
- この場合は、「成績はCです」というメッセージボックスが表示されます。
- Case Else
- Case Elseは、どの条件にも該当しない場合に実行される処理を指定します。
ここでは、「70点未満」の点数に対してこのブロックの処理が実行されます。
- Case Elseは、どの条件にも該当しない場合に実行される処理を指定します。
- MsgBox “成績はDです”
- この場合、「成績はDです」というメッセージボックスが表示されます。
これは、「score」が「70点未満」の場合に実行される処理です。
- この場合、「成績はDです」というメッセージボックスが表示されます。
- End Select
- この行は、Select Case文の終了を示します。
ここまでで、すべての条件分岐の処理が完了します。
- この行は、Select Case文の終了を示します。
- End Sub
- この行は、サブルーチン(プロシージャ)の終了を示します。
この行に到達すると、サブルーチンの処理が完了し、プログラムは次のステップに進みます。
- この行は、サブルーチン(プロシージャ)の終了を示します。
このサブルーチンは、Select Case文を使用して数値の比較を行う基本的な例です。
シンプルなコードで条件を分かりやすく管理することができ、より可読性の高いプログラムを作成するのに役立ちます。
使用例2:特定の数値に基づく条件分岐
この例では、特定の数値 に基づいて処理を分岐する方法を紹介します。
以下のコードでは、セルA1に入力された数値が奇数か偶数かを判定してメッセージを表示します。
Sub CheckOddOrEven()
Dim number As Long
number = Range("A1").Value
Select Case number
Case 1, 3, 5, 7, 9
MsgBox "奇数です"
Case 2, 4, 6, 8
MsgBox "偶数です"
Case Else
MsgBox "1から9の間の数ではありません"
End Select
End Sub
処理結果


コードの動作概要
Range(“A1”).Valueによって、セルA1に入力されている値を取得し、変数numberに代入しています。
この変数「number」が、条件分岐に使用される値です。
Select Case numberにより、「number」変数の値が「奇数」か「偶数」か、または「1~9」の範囲外かに基づいて条件分岐を行います。
各条件に一致した場合、対応するメッセージボックスが表示され、ユーザーに結果が通知されます。
このコードで使用している機能
1行ずつコードを解説
「クリック」してコードの詳細解説を見る
- Sub CheckOddOrEven()
- Subステートメントを使って新しいサブルーチン「CheckOddOrEven」を定義しています。
このサブルーチンは、セル「A1」に入力された数値が「奇数」か「偶数」かを判定し、その結果をメッセージボックスで表示します。
- Subステートメントを使って新しいサブルーチン「CheckOddOrEven」を定義しています。
- Dim number As Long
- Dimステートメントで、「number」という変数をLong型(長整数)として宣言しています。
この変数は、後でセル「A1」の値(数値)を格納するために使います。
- Dimステートメントで、「number」という変数をLong型(長整数)として宣言しています。
- number = Range(“A1”).Value
- Range(“A1”).Valueでセル「A1」に入力されている値を取得し、それを変数「number」に代入します。
この変数「number」が「奇数」か「偶数」か、または「範囲外の数値」であるかを判定する基準となります。
- Range(“A1”).Valueでセル「A1」に入力されている値を取得し、それを変数「number」に代入します。
- Select Case number
- Select Case文を使って、変数「number」に基づく条件分岐を開始します。
変数「number」がどの値に該当するかに応じて、異なる処理が行われます。
- Select Case文を使って、変数「number」に基づく条件分岐を開始します。
- Case 1, 3, 5, 7, 9
- Case 1, 3, 5, 7, 9は、変数「number」がこれらの「奇数の値」に一致する場合に、このブロックの処理が実行されます。
カンマで区切ることで、複数の条件を一度に指定できます。
- Case 1, 3, 5, 7, 9は、変数「number」がこれらの「奇数の値」に一致する場合に、このブロックの処理が実行されます。
- MsgBox “奇数です”
- MsgBoxは、メッセージボックスを表示する関数です。
変数「number「が「奇数」であれば、「奇数です」というメッセージが表示されます。
- MsgBoxは、メッセージボックスを表示する関数です。
- Case 2, 4, 6, 8
- Case 2, 4, 6, 8は、変数「number」がこれらの「偶数の値」に一致する場合に、このブロックの処理が実行されます。
これもカンマで区切って複数の数値を指定しています。
- Case 2, 4, 6, 8は、変数「number」がこれらの「偶数の値」に一致する場合に、このブロックの処理が実行されます。
- MsgBox “偶数です”
- MsgBoxによって、変数「number」が「偶数」の場合、「偶数です」というメッセージが表示されます。
- Case Else
- Case Elseは、上記の「奇数または偶数」の条件に一致しない場合に実行される処理を指定します。
ここでは、「1~9以外」の数値が入力されたときにこのブロックが実行されます。
- Case Elseは、上記の「奇数または偶数」の条件に一致しない場合に実行される処理を指定します。
- MsgBox “1から9の間の数ではありません”
- MsgBoxによって、「1~9」の範囲外の数値が入力された場合、「1から9の間の数ではありません」というメッセージが表示されます。
- End Select
- この行は、Select Case文の終了を示します。
すべての条件分岐の処理がここで完了します。
- この行は、Select Case文の終了を示します。
- End Sub
- この行はサブルーチンの終了を示します。
すべての処理が完了し、次に実行されるコードに処理が移ります。
- この行はサブルーチンの終了を示します。
このコードでは、Select Case文を使って、特定の数値が奇数か偶数かを判定しています。
VBAを使用して数値の条件分岐を行う際、特定の複数の値を一度に処理できるSelect Case文は非常に便利です。
使用例3:文字列を条件として処理を分岐
この例では、特定の文字列 に基づいて処理を分岐する方法を紹介します。
以下のコードでは、セルA1に入力された名前に応じて、異なるメッセージを表示します。
Sub GreetUser()
Dim userName As String
userName = Range("A1").Value
Select Case userName
Case "山田"
MsgBox "こんにちは、山田さん"
Case "鈴木"
MsgBox "こんにちは、鈴木さん"
Case Else
MsgBox "こんにちは、ゲストさん"
End Select
End Sub
処理結果


コードの動作概要
Range(“A1”).Valueで、セルA1に入力された名前を取得し、変数「userName」に代入します。
この変数が条件分岐に使用されます。
Select Case userNameによって、セル「A1」に入力された名前(文字列)に応じて処理を分岐します。
それぞれの名前に一致する場合、対応するメッセージが表示され、それ以外の名前の場合は、ゲスト向けのメッセージが表示されます。
このコードで使用している機能
1行ずつコードを解説
「クリック」してコードの詳細解説を見る
- Sub GreetUser()
- Subステートメントを使って新しいサブルーチン「GreetUser」を定義しています。
このサブルーチンは、セル「A1」に入力された名前に基づいて適切なメッセージを表示します。
- Subステートメントを使って新しいサブルーチン「GreetUser」を定義しています。
- Dim userName As String
- Dimステートメントを使って、「userName」という名前の変数をString型(文字列型)として宣言しています。
この変数は、セル「A1」から取得した名前(文字列)を格納します。
- Dimステートメントを使って、「userName」という名前の変数をString型(文字列型)として宣言しています。
- userName = Range(“A1”).Value
- Range(“A1”).Valueで、セル「A1」に入力された「名前」を取得し、変数「userName」に代入します。
ここで取得された名前が、次の条件分岐に使用されます。
- Range(“A1”).Valueで、セル「A1」に入力された「名前」を取得し、変数「userName」に代入します。
- Select Case userName
- Select Case文を使って、変数「userName(名前)」に基づく条件分岐を開始します。
ここで、変数「userName」がどの名前に一致するかによって処理を分岐させます。
- Select Case文を使って、変数「userName(名前)」に基づく条件分岐を開始します。
- Case “山田”
- この行では、変数「userName」が「”山田”」に一致する場合の処理を指定しています。つまり、セル「A1」に「山田」と入力されているときに、このブロック内の処理が実行されます。
- MsgBox “こんにちは、山田さん”
- MsgBox関数を使ってメッセージボックスを表示します。
変数「userName」が「山田」に一致する場合、「こんにちは、山田さん」というメッセージが表示されます。
- MsgBox関数を使ってメッセージボックスを表示します。
- Case “鈴木”
- この行では、変数「userName」が「”鈴木”」に一致する場合の処理を指定しています。
セル「A1」に「鈴木」と入力されている場合に、このブロック内の処理が実行されます。
- この行では、変数「userName」が「”鈴木”」に一致する場合の処理を指定しています。
- MsgBox “こんにちは、鈴木さん”
- MsgBox関数で、変数「userName」が「鈴木」に一致した場合、「こんにちは、鈴木さん」というメッセージが表示されます。
- Case Else
- Case Elseは、上記の条件(山田・鈴木)に一致しない場合に実行される処理を指定します。
変数「userName」が「山田」でも「鈴木」でもない場合、このブロックの処理が実行されます。
- Case Elseは、上記の条件(山田・鈴木)に一致しない場合に実行される処理を指定します。
- MsgBox “こんにちは、ゲストさん”
- MsgBox関数で、変数「userName」が「山田」でも「鈴木」でもない場合、「こんにちは、ゲストさん」というメッセージが表示されます。
これは、名前が特定されていないゲスト向けのメッセージです。
- MsgBox関数で、変数「userName」が「山田」でも「鈴木」でもない場合、「こんにちは、ゲストさん」というメッセージが表示されます。
- End Select
- Select Case文の終了を示す行です。
すべての条件分岐の処理がここで完了します。
- Select Case文の終了を示す行です。
- End Sub
- サブルーチンの終了を示す行です。
この行に到達すると、サブルーチンの実行が完了し、次に進む処理が実行されます。
- サブルーチンの終了を示す行です。
このコードは、Select Case文を使って、文字列(名前)に基づいて処理を分岐させています。
特定の名前に一致する条件に応じてメッセージを表示するシンプルな例ですが、VBAで文字列を扱う条件分岐の基本として非常に有用です。
使用例4:数値の範囲を条件にした処理分岐 (Toキーワード)
この例では、数値の範囲 に基づいて処理を分岐する方法を紹介します。
数値の範囲を指定する場合は、「Case 1 To 10」のように、「To」が必要になります。
以下のコードでは、セルA1に入力された数値がどの範囲に属するかを判定してメッセージを表示します。
Sub EvaluateRange()
Dim value As Long
value = Range("A1").value
Select Case value
Case 1 To 10
MsgBox "1から10の間の数です"
Case 11 To 20
MsgBox "11から20の間の数です"
Case Else
MsgBox "範囲外の数です"
End Select
End Sub
処理結果


コードの動作概要
Range(“A1”).Valueで、セルA1に入力された数値を取得し、それを変数「value」に代入します。
この変数「value」が条件分岐に使用される数値です。
「Select Case value」を使用して、セル「A1」の値が特定の範囲に含まれるかどうかで処理を分岐させます。
指定された範囲に属する数値に応じたメッセージが表示され、それ以外の場合には範囲外のメッセージが表示されます。
このコードで使用している機能
1行ずつコードを解説
「クリック」してコードの詳細解説を見る
- Sub EvaluateRange()
- Subステートメントを使用して、新しいサブルーチン「EvaluateRange」を定義しています。
このサブルーチンは、セル「A1」に入力された数値の範囲に応じて、異なるメッセージを表示するためのものです。
- Subステートメントを使用して、新しいサブルーチン「EvaluateRange」を定義しています。
- Dim value As Long
- Dimステートメントで、「value」という変数をLong型(長整数型)として宣言しています。
後で、セル「A1」に入力された数値をこの変数に格納します。
- Dimステートメントで、「value」という変数をLong型(長整数型)として宣言しています。
- value = Range(“A1”).Value
- Range(“A1”).Valueでセル「A1」に入力された「数値」を取得し、それを変数「value」に代入します。
この値が、次の条件分岐で使用されます。
- Range(“A1”).Valueでセル「A1」に入力された「数値」を取得し、それを変数「value」に代入します。
- Select Case value
- Select Case文を使って、変数「value」の値に基づく条件分岐を開始します。
変数「value」がどの範囲に含まれるかに応じて処理を分岐させます。
- Select Case文を使って、変数「value」の値に基づく条件分岐を開始します。
- Case 1 To 10
- Case 1 To 10は、変数「value」が「1から10の範囲内」にある場合に、このブロックの処理が実行されることを示しています。
「To」を使うことで、指定した範囲内の数値を一度に判定できます。
- Case 1 To 10は、変数「value」が「1から10の範囲内」にある場合に、このブロックの処理が実行されることを示しています。
- MsgBox “1から10の間の数です”
- MsgBox関数を使ってメッセージボックスを表示します。
変数「value」が「1から10」の間であれば、「1から10の間の数です」というメッセージが表示されます。
- MsgBox関数を使ってメッセージボックスを表示します。
- Case 11 To 20
- Case 11 To 20は、変数「value」が「11から20」の範囲内にある場合に、このブロックの処理が実行されることを示しています。
- MsgBox “11から20の間の数です”
- MsgBox関数で、変数「value」が「11から20」の間に該当する場合、「11から20の間の数です」というメッセージが表示されます。
- Case Else
- Case Elseは、上記のどの条件にも該当しない場合に実行される処理を指定します。
ここでは、変数「value」が「1~20の範囲外」の数値だった場合に実行されます。
- Case Elseは、上記のどの条件にも該当しない場合に実行される処理を指定します。
- MsgBox “範囲外の数です”
- MsgBox関数で、変数「value」が指定された範囲外の場合に、「範囲外の数です」というメッセージが表示されます。
- End Select
- この行は、Select Case文の終了を示します。
すべての条件分岐の処理がここで完了します。
- この行は、Select Case文の終了を示します。
- End Sub
- この行は、サブルーチンの終了を示します。
すべての処理が終了し、次のステップに進む準備が整います。
- この行は、サブルーチンの終了を示します。
このコードでは、Select Case文を使用して、数値の範囲に基づいて処理を分岐させています。
「To」を使って範囲指定をすることで、複数の数値条件を一度に判定できるため、条件分岐が非常にシンプルかつ効率的に行えます。
使用例5:文字列のパターンマッチングに基づく条件分岐 (ワイルドカード)
Like演算子を使って文字列のパターンに基づく 条件分岐の例です。
Like演算子を使うことで、文字列が特定のパターンに一致するかどうかを判定できます。
また、Like演算子を使用する場合は、ワイルドカードを使ってパターンマッチングを行うことができます。
Sub CheckPattern()
Dim text As String
text = Range("A1").value
Select Case True
Case text Like "A####"
MsgBox "A1は'A'で始まり、続く4文字が数字です"
Case text Like "B*"
MsgBox "A1は'B'で始まる文字列です"
Case Else
MsgBox "A1の値は指定のパターンと一致しません"
End Select
End Sub
処理結果


コードの動作概要
Range(“A1”).Valueによって、セルA1に入力された文字列を取得し、それを変数「text」に代入します。
この文字列が、次の条件分岐で評価されます。
Select Case Trueを使用して、文字列「text」が指定のパターンに一致するかどうかを判定し、それに応じた処理を行います。
それぞれの条件に一致した場合、対応するメッセージが表示され、パターンに一致しない場合には、別のメッセージが表示されます。
このコードで使用している機能
1行ずつコードを解説
「クリック」してコードの詳細解説を見る
- Sub CheckPattern()
- Subステートメントを使用して、新しいサブルーチン「CheckPattern」を定義しています。
このサブルーチンでは、セルA1に入力された文字列が特定のパターンに一致するかどうかを判定します。
- Subステートメントを使用して、新しいサブルーチン「CheckPattern」を定義しています。
- Dim text As String
- Dimステートメントを使用して、「text」という変数をString型(文字列型)として宣言しています。
後でセル「A1」に入力された「文字列」をこの変数に格納します。
- Dimステートメントを使用して、「text」という変数をString型(文字列型)として宣言しています。
- text = Range(“A1”).Value
- Range(“A1”).Valueで、セル「A1」に入力された「文字列」を取得し、それを変数「text」に代入します。この文字列が、次の条件分岐で評価されます。
- Select Case True
- Select Case Trueを使って、各条件が「True」であるかどうかを評価し、分岐処理を行います。
「True」は、条件が成立した場合に実行する処理を意味します。
- Select Case Trueを使って、各条件が「True」であるかどうかを評価し、分岐処理を行います。
- Case text Like “A####”
- Case text Like “A####”は、変数「text」の値が「A」で始まり、後に4桁の数字が続くパターンに一致する場合、このブロックの処理が実行されることを示しています。
「Like演算子」を使って、パターンマッチングを行っています。
「#」は任意の1桁の数字を表します。
⇒ ワイルドカードについてもう一度見る
- Case text Like “A####”は、変数「text」の値が「A」で始まり、後に4桁の数字が続くパターンに一致する場合、このブロックの処理が実行されることを示しています。
- MsgBox “A1は’A’で始まり、続く4文字が数字です”
- MsgBox関数を使ってメッセージボックスを表示します。
変数「text」が「A####」というパターンに一致する場合、「A1は’A’で始まり、続く4文字が数字です」というメッセージが表示されます。
- MsgBox関数を使ってメッセージボックスを表示します。
- Case text Like “B*”
- Case text Like “B*”は、変数「text」の値が「B」で始まる任意の文字列に一致する場合、このブロックの処理が実行されます。
「*」は0文字以上の任意の文字列を意味します。
⇒ ワイルドカードについてもう一度見る
- Case text Like “B*”は、変数「text」の値が「B」で始まる任意の文字列に一致する場合、このブロックの処理が実行されます。
- MsgBox “A1は’B’で始まる文字列です”
- MsgBox関数で、変数「text」が「B」で始まる文字列に一致した場合、「A1は’B’で始まる文字列です」というメッセージが表示されます。
- Case Else
- Case Elseは、上記の条件に一致しない場合に実行される処理を指定します。
変数「text」が指定されたパターンに一致しなかった場合、このブロックの処理が実行されます。
- Case Elseは、上記の条件に一致しない場合に実行される処理を指定します。
- MsgBox “A1の値は指定のパターンと一致しません”
- MsgBox関数で、変数「text」がどの条件にも一致しない場合に、「A1の値は指定のパターンと一致しません」というメッセージが表示されます。
- End Select
- この行は、Select Case文の終了を示します。
すべての条件分岐の処理がここで完了します。
- この行は、Select Case文の終了を示します。
- End Sub
- この行は、サブルーチンの終了を示します。
すべての処理が完了し、次のステップに進む準備が整います。
- この行は、サブルーチンの終了を示します。
このコードでは、Like演算子を使用して、文字列のパターンマッチングを行っています。
ワイルドカードを活用することで、文字列の特定のパターンに基づいた柔軟な条件分岐が可能です。
これにより、特定の形式やパターンに応じた処理が簡単に記述できます。
この記事のまとめ
この記事では、VBAのSelect Case文を使用して、複数の条件を簡潔に処理する方法を解説しました。
数値や文字列の条件分岐から、ワイルドカードを使ったパターンマッチングまで、さまざまな応用方法が取り扱えるようになったと思います。
ポイントのおさらい
- Select Case文の基本構造を理解する
- Select Case文を使うことで、複数の条件を効率よく整理し、コードの可読性を向上させることができます。
特に、VBA select case 複数条件やVBA select case 文字列といった複雑な条件にも対応可能です。
⇒ 「VBA「Select Case文」の基本を解説」もう一度見る。
- Select Case文を使うことで、複数の条件を効率よく整理し、コードの可読性を向上させることができます。
- 文字列や数値に基づく柔軟な分岐処理
- Select Caseは、数値や文字列を基に条件を整理でき、複数の条件をまとめて処理できます。
また、ワイルドカードを活用して、文字列のパターンマッチングにも対応可能です。
⇒ 「Select Case文の応用「比較演算・範囲指定・ワイルドカード」」もう一度見る。
- Select Caseは、数値や文字列を基に条件を整理でき、複数の条件をまとめて処理できます。
- 使用する際の注意ポイント
- 複数の条件がある場合、Select Case文はIF文に比べて処理が簡潔になりますが、条件の順序や範囲の指定には注意が必要です。
特に「VBA select case 何もしない」ようなパターンでも、Case Elseを活用することで抜け漏れのない処理が実現できます。
⇒ 「「Select Case文」を使用するうえでの注意ポイント」もう一度見る。
- 複数の条件がある場合、Select Case文はIF文に比べて処理が簡潔になりますが、条件の順序や範囲の指定には注意が必要です。
- 実際に使用するシーン
- 以下の具体的な使用例を通して、Select Case文を活用した実践的なVBAコードを確認しました。
⇒ 「Select Case文の使用例をご紹介」もう一度見る。
- 以下の具体的な使用例を通して、Select Case文を活用した実践的なVBAコードを確認しました。
さらに学ぶために
Select Case文は、複数の条件分岐を簡潔に記述するための非常に強力なツールです。
特に、IF文では複雑になりがちなコードを整理するのに役立ちます。
さらに、Select Case文を応用することで、業務効率を高めるための柔軟なVBAプログラムを作成することができます。
また、IF文との使い分けを理解することで、より適材適所に条件分岐を適用できるようになります。
IF分については、別記事で解説していますので、そちらをご覧ください。


Select Case文を使いこなすことで、VBAでの条件分岐をより効率的に管理し、コードの可読性とメンテナンス性を向上させましょう。

