【VBA】Select Case使い方完全攻略!初心者でも5分でマスターできる実践テクニック

【VBA】Select Case使い方完全攻略!初心者でも5分でマスターできる実践テクニック

 

VBAの条件分岐で「If文だけでは複雑すぎる…」と悩んでいませんか?

 

こんな問題はSelect Case文の活用で解決することができます。

 

3つ以上の条件分岐ならSelect Case文を使った方がコードをスッキリさせることが可能です。

if文だけでスク雑な条件分岐を処理すると、コードが複雑なりデバックしずらくなってしまいますよね。。。

 

この記事では、Select Case文の基本から応用テクニックまでを初心者向けに完全解説します。

曜日判定、成績評価、売上ランク分けなど、実際の業務でよく使われる15のサンプルコードも掲載。

 

コピペするだけで今すぐ使えるので、読み終わる頃にはあなたもSelect Caseを自由に扱えるようになるはずです。

 

広告

【VAB】Select Caseとは?基本概念と書き方を理解しよう

VBA Select Caseは、複数の条件を効率的に処理できる条件分岐の構文です。

一つの変数や式に対して複数の値をチェックし、それぞれに応じた処理を実行することができます。

 

プログラミング初心者でも直感的に理解しやすく、コードの可読性が大幅に向上するため、ExcelVBAでは必須のテクニックといえるでしょう。

 

Select Case文を使うことで、複雑な条件分岐を簡潔に記述でき、メンテナンスしやすいプログラムを作成できます。

 

Select Case文の基本構文とルール

Select Case文の基本構文は非常にシンプルです。

 

まず「Select Case」でチェックしたい変数を指定し、「Case」で各条件を記述し、最後に「End Select」で文を終了します。

各Case文の後には、その条件が満たされた時に実行する処理を記述します。

 

Sub BasicSelectCase()
Dim score As Integer
score = 85

Select Case score
Case 90
MsgBox "優秀です"
Case 80
MsgBox "良好です"
Case 70
MsgBox "普通です"
Case Else
MsgBox "その他"
End Select
End Sub

このコードでは、

まずscore変数に85を代入。Select Case文がscoreの値をチェックし、Case 90、Case 80、Case 70の順番で条件を確認していく。scoreが85なのでどの条件にも該当せず、最終的にCase Elseが実行されて「その他」のメッセージボックスを表示する

という内容です。

 

実行結果がこちら

Select Case文を使ったVBAの実行結果

 

VBAのコードをどこに書けばいいのかわからない。。。

という方は関連記事「VBAの作り方」を参照してください。

VBAコードを記述する画面に開き方や標準モジュールの作成方法、などが紹介されています。

 

If文との違いとSelect Caseを使うべき場面

If文とSelect Case文の最大の違いは、条件の数と可読性にあります。

If文は2つ程度の条件分岐では適していますが、条件が3つ以上になるとコードが複雑になり、バグの原因となりやすくなります。

 

一方、Select Case文は一つの変数に対する複数の値の比較に特化しており、条件が増えてもコードの見通しが良いまま。

特に、曜日判定や成績評価、メニュー選択など、固定的な値による分岐処理では威力を発揮します。

 

Sub CompareIfAndSelect()
Dim dayNumber As Integer
dayNumber = 3

'【Select Case版】見やすい
Select Case dayNumber
Case 1: MsgBox "月曜日"
Case 2: MsgBox "火曜日"
Case 3: MsgBox "水曜日"
End Select
End Sub

このコードでは、

dayNumber変数に3を設。Select Case文がdayNumberの値をチェックし、Case 3に該当するため「水曜日」のメッセージを表示する。

という内容です。

 

同じ処理をIf文で書くと、ElseIfを何度も繰り返す必要があり、コードが長くなってしまいます。

 

関連記事「For文とif文の組み合わせ方法」では、エクセル業務で使用頻度の高い繰り返し処理の作り方が紹介されています。

 

Case文の書き方パターン3選

Case文には主に3つの基本的な書き方パターンがあります。

  • 単一値の指定
  • 複数値の指定
  • 範囲指定

 

単一値は「Case 1」のように一つの値だけを指定する最もシンプルな形です。

複数値は「Case 1, 3, 5」のようにカンマで区切って複数の値を指定できます。

範囲指定は「Case 1 To 5」のようにTo演算子を使って値の範囲を指定する方法です。

 

これらのパターンを使い分けることで、様々な条件分岐を柔軟に表現できます。

Sub CasePatterns()
Dim testValue As Integer
testValue = 4

Select Case testValue
Case 1 '単一値
MsgBox "1です"
Case 2, 3 '複数値
MsgBox "2または3です"
Case 4 To 6 '範囲指定
MsgBox "4から6の間です"
Case Else
MsgBox "その他"
End Select
End Sub

このコードでは、

testValueに4を設定。最初にCase 1(単一値)をチェックしますが該当しません。次にCase 2, 3(複数値)をチェックしますが該当しません。

最後にCase 4 To 6(範囲指定)をチェックし、testValue(4)は4から6の範囲に含まれるため、「4から6の間です」のメッセージを表示する

という内容です。

 

【VBA】Select Case基本的な使い方【コピペで即実践】

Select Case文は、

1つの変数や値に対して複数の条件をチェックする場面で効力を発揮

します。

 

数値の比較、文字列の判定、デフォルト処理の設定など、実際の業務でよく使われるパターンを理解すれば、すぐに実践で活用することが可能です。

 

ここからは、コピー&ペーストですぐに使えるサンプルコードを通じて、Select Case文の実用的な使い方を学んでいきましょう。

 

単純な値の比較による条件分岐

数値による条件分岐は、Select Case文の最も基本的な使い方です。

営業成績の評価、試験の点数判定、商品の価格帯分類など、ビジネスの現場では数値による分類処理が頻繁に発生します。

 

Select Case文を使うことで、これらの処理を簡潔かつ分かりやすく記述できます。

Sub NumericComparison()
Dim salesAmount As Long
salesAmount = 150000

Select Case salesAmount
Case 200000
MsgBox "目標達成!ボーナス支給"
Case 150000
MsgBox "良好な成績です"
Case 100000
MsgBox "標準的な成績です"
Case 50000
MsgBox "もう少し頑張りましょう"
Case Else
MsgBox "個別相談が必要です"
End Select
End Sub

このコードでは、

salesAmount変数に150000を設定。Select Case文がsalesAmountの値を順番にチェックし、Case 150000に該当するため「良好な成績です」のメッセージを表示する。

という内容です。

 

各Caseは上から順番に評価され、最初に条件に合致したCaseの処理が実行されて、その後のCaseは無視されます。

 

文字列を使った条件分岐の書き方

文字列による条件分岐は、ユーザーの入力値や選択肢に応じて処理を変える場面でよく使われます。

部署名による処理の振り分け、商品カテゴリの分類、ステータス管理など、テキストデータを扱う業務では必須のテクニックです。

 

文字列の比較では大文字小文字の区別に注意が必要で、必要に応じてUCase関数やLCase関数で統一することが重要です。

Sub StringComparison()
Dim department As String
department = "営業部"

Select Case department
Case "営業部"
MsgBox "売上目標の確認をしてください"
Case "経理部"
MsgBox "月次決算の準備をしてください"
Case "人事部"
MsgBox "採用計画の見直しをしてください"
Case Else
MsgBox "一般的な業務を行ってください"
End Select
End Sub

このコードでは、

department変数に「営業部」を設定。Select Case文がdepartmentの値をチェックし、Case “営業部"に該当するため「売上目標の確認をしてください」のメッセージを表示する

という内容です。

 

文字列の比較は完全一致で行われるため、スペースや文字の違いがあると条件に合致しないので注意が必要です。

 

関連記事「全角・半角を変換するマクロ」では、指定するセル範囲の文字列の半角・全角を瞬時に変換するマクロをダウンロードすることができます。

 

 

Case Elseを使ったデフォルト処理の設定

Case Else文は、すべてのCase条件に該当しない場合の処理をしっかり定義しましょう。

エラー処理や例外的な値への対応、予期しない入力への対処など、プログラムの安全性を高めるために必須の記述です。

 

Case Elseを省略することも可能ですが、保守性とバグ防止の観点から、必ず記述することを強く推奨します。

Sub DefaultProcessing()
Dim userInput As String
userInput = "不明な値"

Select Case userInput
Case "開始"
MsgBox "処理を開始します"
Case "停止"
MsgBox "処理を停止します"
Case "一時停止"
MsgBox "処理を一時停止します"
Case Else
MsgBox "無効な入力です。正しい値を入力してください"
End Select
End Sub

このコードでは、

userInput変数に「不明な値」を設定。Select Case文が各Caseをチェックしますが、どの条件にも該当しないため、Case Elseが実行されて「無効な入力です。正しい値を入力してください」のメッセージを表示する

という内容です。

 

このようにCase Elseを使うことで、想定外の値に対しても適切に対応できます。

 

【VBA】Select Case応用テクニック【複数条件・範囲指定】

Select Case文の真価は、複数条件や範囲指定を使った高度な条件分岐にあります。

To演算子による範囲指定、Is演算子による比較演算、カンマ区切りによる複数値指定など、これらの応用テクニックを習得することで、複雑な処理が必要なエクセル業務にも対応できるようになります。

 

従来のIf文では煩雑になりがちな条件分岐も、Select Caseの応用テクニックを使えば驚くほどシンプルに記述することが可能。

これらのテクニックは、実際のビジネスアプリケーション開発では欠かせない重要なスキルです。

 

To演算子を使った範囲指定の条件分岐

To演算子は、数値の範囲を指定する際に非常に便利な機能です。

売上高による評価ランク分け、年齢層の分類、点数による成績判定など、連続する数値範囲での条件分岐が必要な場面で威力を発揮します。

 

従来のIf文で「>=」や「<=」を組み合わせて記述していた複雑な条件も、To演算子を使えば直感的に理解しやすいコードになります。

Sub RangeComparison()
Dim testScore As Integer
testScore = 75

Select Case testScore
Case 90 To 100
MsgBox "A評価:優秀"
Case 80 To 89
MsgBox "B評価:良好"
Case 70 To 79
MsgBox "C評価:普通"
Case 60 To 69
MsgBox "D評価:要努力"
Case Else
MsgBox "F評価:再試験"
End Select
End Sub

このコードでは、

testScore変数に75を設定。Select Case文が各Caseの範囲をチェックし、Case 70 To 79のとき「C評価:普通」のメッセージを表示する。

という内容です。

 

To演算子は指定した値を含む範囲(70以上79以下)で判定されるため、境界値の処理も明確になります。

 

Is演算子で比較演算子を使う方法

Is演算子を使うことで、Select Case文内で比較演算子(>、<、>=、<=、<>)を使用できます。

 

単純な値の一致だけでなくより柔軟な条件判定が可能になります。

 

上限や下限の判定、不等号を使った条件分岐、除外条件の指定など、複雑な処理が必要なエクセル業務で活用されます。

Sub IsOperatorExample()
Dim temperature As Integer
temperature = 35

Select Case temperature
Case Is >= 35
MsgBox "猛暑日:外出注意"
Case Is >= 30
MsgBox "真夏日:熱中症注意"
Case Is >= 25
MsgBox "夏日:水分補給を"
Case Is < 0
MsgBox "氷点下:防寒対策を"
Case Else
MsgBox "過ごしやすい気温です"
End Select
End Sub

 

このコードでは、

temperature変数に35を設定。Select Case文が上から順番に条件をチェックし、最初にCase Is >= 35に該当する「猛暑日:外出注意」のメッセージを表示する。

という内容です。

 

Is演算子を使う場合は、条件の順番が重要で、より厳しい条件を上に配置する必要があります。

 

カンマ区切りで複数値を指定するテクニック

カンマ区切りによる複数値指定は、複数の異なる値に対して同じ処理を実行したい場合に使用します。

曜日の分類(平日・休日)、月の分類(四半期)、商品コードの分類など、グループ化された値に対する処理では非常に有効です。

 

複数のCase文を書く代わりに、一つのCase文で複数の値をまとめて処理できるため、コードの簡潔性と保守性が向上します。

Sub MultipleValuesExample()
Dim monthNumber As Integer
monthNumber = 4

Select Case monthNumber
Case 1, 2, 3
MsgBox "第1四半期です"
Case 4, 5, 6
MsgBox "第2四半期です"
Case 7, 8, 9
MsgBox "第3四半期です"
Case 10, 11, 12
MsgBox "第4四半期です"
Case Else
MsgBox "無効な月番号です"
End Select
End Sub

このコードでは、

monthNumber変数に4を設定。Select Case文がmonthNumberの値をチェックし、Case 4, 5, 6に該当する「第2四半期です」のメッセージを表示する。

という内容です。

 

カンマで区切られた値のいずれかに該当すれば条件が満たされるため、効率的なグループ分けが可能になります。

 

【VBA】Select Case実践サンプルコード集

実際のビジネスシーンでSelect Case文を活用するためには、具体的なサンプルコードを通じて実践的な使い方を学ぶことが重要です。

成績判定システム、曜日判定とメッセージ表示、販売実績による評価ランク分けなど、エクセル実務でよく使われる処理パターンを習得することで、臨機応変な応用力が身に付きます。

 

これから紹介するサンプルコードは、そのまま使用することも可能ですし、自分の業務に合わせてカスタマイズするも可能です。

エクセル業務の効率化に役立ててください。

 

成績判定システムの作成例

成績判定システムは、教育現場や人事評価でよく使われる代表的な応用例です。

点数に応じて自動的に評価を決定し、適切なメッセージを表示することで、効率的な成績管理が可能になります。

 

このシステムでは、To演算子を使った範囲指定と、適切なメッセージ表示を組み合わせることで、実用性の高いマクロに仕上げることが可能です。

Sub GradeJudgmentSystem()
Dim studentScore As Integer
Dim gradeLetter As String
Dim message As String

studentScore = 82

Select Case studentScore
Case 90 To 100
gradeLetter = "A"
message = "優秀な成績です。この調子で頑張ってください。"
Case 80 To 89
gradeLetter = "B"
message = "良好な成績です。さらなる向上を目指しましょう。"
Case 70 To 79
gradeLetter = "C"
message = "標準的な成績です。復習を心がけてください。"
Case 60 To 69
gradeLetter = "D"
message = "もう少し努力が必要です。基礎を見直しましょう。"
Case Else
gradeLetter = "F"
message = "再試験が必要です。しっかりと復習してください。"
End Select

MsgBox "得点: " & studentScore & "点" & vbCrLf & _
"評価: " & gradeLetter & vbCrLf & _
"コメント: " & message
End Sub

 

このコードでは、

studentScore変数に82を設定。Select Case文が点数をチェックし、Case 80 To 89に該当するgradeLetter変数"B"に該当するメッセージを設定する。

という内容です。

 

実行結果がこちら

成績判定システムの実行結果

 

最後に、得点、評価、コメントをまとめてメッセージボックスで表示し、総合的な成績判定結果を提供します。

 

曜日判定とメッセージ表示の実装

曜日判定システムは、勤怠管理や予定管理アプリケーションでよく使われる機能です。

Weekday関数で取得した曜日番号を使い、適切なメッセージや処理を実行することで、使いやすいマクロに仕上げることができます。

 

平日と休日の区別、特定曜日での特別処理など、様々な業務要件に対応できるようにしましょう。

Sub WeekdayJudgment()
Dim todayNumber As Integer
Dim dayName As String
Dim workMessage As String

todayNumber = Weekday(Date) '今日の曜日番号を取得

Select Case todayNumber
Case 1 '日曜日
dayName = "日曜日"
workMessage = "今日は休日です。ゆっくりお休みください。"
Case 2 '月曜日
dayName = "月曜日"
workMessage = "今週も頑張りましょう!週初めです。"
Case 3, 4, 5 '火水木曜日
Select Case todayNumber
Case 3: dayName = "火曜日"
Case 4: dayName = "水曜日"
Case 5: dayName = "木曜日"
End Select
workMessage = "平日です。業務に集中しましょう。"
Case 6 '金曜日
dayName = "金曜日"
workMessage = "今週最後の平日です。週末まであと少し!"
Case 7 '土曜日
dayName = "土曜日"
workMessage = "今日は休日です。有意義な休日をお過ごしください。"
End Select

MsgBox "今日は" & dayName & "です。" & vbCrLf & workMessage
End Sub

 

このコードでは、

Weekday関数を使って今日の曜日番号を取得し、todayNumber変数に格納。Select Case文が曜日番号をチェックし、該当する曜日の処理を実行する。

という内容です。

 

実行結果がこちら

平日と休日の区別、特定曜日での特別をするマクロの実行結果

 

火曜日から木曜日は一つのCaseでまとめて処理し、その中でさらにSelect Caseを使って個別の曜日名を設定する入れ子構造を使っています。

 

販売実績による評価ランク分けシステム

販売実績評価システムは、営業部門や販売管理でよく使われる重要な機能です。

売上金額に応じて自動的にランクを決定し、対応するインセンティブや次期目標を設定することで、効率的な営業管理が可能になります。

 

このシステムでは、数値範囲の判定と複数の変数への値設定を組み合わせ、複雑な条件下でも適切な値を自動出力するマクロになっています。

Sub SalesRankingSystem()
Dim salesAmount As Long
Dim rankLevel As String
Dim incentiveRate As Double
Dim nextTarget As Long

salesAmount = 850000

Select Case salesAmount
Case Is >= 1000000
rankLevel = "S級"
incentiveRate = 0.15
nextTarget = salesAmount + 500000
Case 800000 To 999999
rankLevel = "A級"
incentiveRate = 0.12
nextTarget = 1000000
Case 600000 To 799999
rankLevel = "B級"
incentiveRate = 0.08
nextTarget = 800000
Case 400000 To 599999
rankLevel = "C級"
incentiveRate = 0.05
nextTarget = 600000
Case 200000 To 399999
rankLevel = "D級"
incentiveRate = 0.02
nextTarget = 400000
Case Else
rankLevel = "要改善"
incentiveRate = 0
nextTarget = 200000
End Select

MsgBox "【販売実績評価】" & vbCrLf & _
"売上金額: " & Format(salesAmount, "#,##0") & "円" & vbCrLf & _
"ランク: " & rankLevel & vbCrLf & _
"インセンティブ率: " & Format(incentiveRate * 100, "0.0") & "%" & vbCrLf & _
"次期目標: " & Format(nextTarget, "#,##0") & "円"
End Sub

このコードでは、

salesAmount変数に850000を設定。Select Case文が売上金額をチェックし、Case 800000 To 999999に該当するため、A級ランクに分類。それに応じて、インセンティブ率12%と次期目標1,000,000円が設定され、最終的に包括的な評価結果がメッセージボックスで表示する。

という内容です。

 

実行結果がこちら

販売実績評価システムの実行結果

 

このシステムにより、売上実績の評価と目標設定を自動化できます。

 

 

VBA初心者が効率化マクロを導入する方法

VBA初心者が効率化Vマクロを導入する方法

 

VBAなんて扱ったことないけど、複雑な条件でも瞬時に適切な結果を出力する効率化マクロを導入したい!

 

こんな問題を解決する方法がこちら

  • マクロの開発を外注に依頼する
  • マクロが設定されたエクセルファイルをダウンロードする
  • 参考書やネットでVBAスキルを身に付ける

 

VBAスキルを身に着ける前は、「マクロ開発の外注」で対応していましたが、

今では自分で効率化マクロをサクッと導入しちゃいます。

 

完成されたマクロを使ってエクセル業務を処理する

作業効率が2倍以上アップ!!

便利すぎて自分でもマクロを設定したいと考え始める

参考書やネットの情報でVBAスキルを身に付ける

マクロ開発を代行できる程のスキルを習得

 

 

VBAは

他のプログラミングに比べて参考書やネットで紹介されている情報量が多いので初心者でも導入しやすい

という特徴があります。

 

外注した方が楽だけど、費用がかかる。自分で導入すれば費用は0円だけど時間がかかる。。

いずれにせよ、効率化マクロを導入できれば作業効率が飛躍的にアップするのは間違いありません。

 

あなたに合った方法で導入しちゃいましょう。

 

マクロ開発を外注に依頼する

マクロ開発を外注に依頼する方法は

VBAを全く扱えない方でもエクセル作業を自動化できる最も簡単な方法

です。

 

「複雑な条件分岐を自動化したい」「作った資料を自動的にPDFで保存したい」「決まった様式に写真を自動で貼り付けたい」

こんな感じで実現したい内容を依頼するだけで業務内容に合ったマクロを開発してくれます。

 

Left Caption

ガッツポーズの人

完成まで本業に集中できるので効率的

 

 

デメリットは、費用がかかることだけ。

開発内容、依頼先によってかかる費用は大きく異なります。

私が会社員の頃利用していた業者さんは1マクロあたり2万円~3万円の費用がかかりました。

 

Left Caption

疑問がある人

ちょっと高くない。。。

 

ちなみに、マメBlogでもエクセルマクロ開発代行サービスを承っています。

開発内容の確認、VBAコードの設定、動作確認後の調整、など全ての工程を私(マメ父ちゃん)が行っているので、

費用が安い!スピード納期!!

でやらせてもらっています。

 

ほとんど独学で身に付けたVBAスキルなので、内容によっては開発できないこともあるのでご了承ください。

 

ご相談、見積もり依頼は完全無料ですので気になる方は下記のリンクよりお問合せ下さい。

 

 

マクロが設定されたエクセルファイルをダウンロードする

VBA初心者でも『マクロが設定されたエクセルファイルをダウンロード』することで、

すぐに使っているエクセルにマクロを導入することができます。

 

VBA初心者でも形になっているマクロをゲットできる、費用が安い、

というメリットがあります。

しかし、

想定するマクロを見つけることが難しい、業務内容に合わせるためのアレンジが必要

というデメリットもあります。

 

Left Caption

ガッツポーズの人

お目当てのマクロが見つかればラッキー

 

個人ブログやファイルを販売できるサイト「note」や「Tips」ではいろんなマクロの情報が掲載されているので是非参考にしてみてください。

 

今までマメBlogで受注した効率化マクロを下記のnoteで掲載していますので併せてチェックしてみてください。

 

 

 

参考書やネットでVBAスキルを身に付ける

先程も紹介しましたが、

VBAは他のプログラミングに比べて参考書やネットで紹介されている情報量が多いので初心者でも導入しやすい

プログラミングです。

 

言い換えると、

情報量が豊富なので自分で勉強できちゃう

ということです。

 

私のVBAスキルはほとんど独学で身に付けたもので、

考えた処理のほとんどをVBAで表現できるレベルにまで到達した!

と思っています。

 

私の作ったマクロをプロのプログラマーが見れば、

お前の書くコードはインチキだ!「変数の宣言」とか「引数」を正しく使えよ!!

と感じるはずです。

 

でも、

私からすればどうでもいい!!!想定した内容を正しく処理できればよくないですか!?

 

独学であっても『条件分岐マクロ』『全てのシートをPDF出力するマクロ』『連番を振るマクロ』など、

業務内容に合ったマクロを開発できるようになれます。

 

独学でVBAスキルを身に付けるコツは、

エラーが発生してもいいからひたすらコードを書く、なんでもいいからエクセル作業をマクロ化してみる

です。

 

とは言っても、全くの知識0の方は何をすればいいかわからないですよね。

 

VBA知識0の初心者の方は、参考書『たった1秒で仕事が片づくExcel自動化の教科書【増強完全版】』を読んでみてください。

 

VBAの知識0の方でもすいすい読み進められる内容になっています。

やさしい内容にも関わらず「え!!VBAを使えばこんなことできるの!?」と感動すると思います。

 

実際に私はこの参考書を読んでからVBAの勉強を始めました。

 

Left Caption

ひらめく人

VBA学習スタートのきっかけをくれた参考書


 

 

VBAの魅力を発見した後は、

ひたすら自動化したい内容のコードを書くだけ

です。

 

【VBA Select case】【VBA 条件分岐】でネット検索すれば知りたいコードをすぐにゲットできます。

 

実現したい処理に向かって、「調べる→書いてみる→エラーを改善する→調べる」を繰り返していると

自然といろんなマクロが作れるようになっているはずです。

 

VBAに興味が湧いてきたという方は今からVBA学習をスタートさせちゃいましょう。