エクセルVBA超入門講座(第7回)Select Caseの使い方

excel-vba-lecture07 Excelマクロ

前回の講座で条件分岐のうちIf文について解説しました。詳しくはエクセルVBA超入門講座(第6回)参照ください。

今回は条件分岐のもう1つ「Select Case」の使い方について解説します。

Select Caseでは単一条件から複数条件、範囲指定や値の大小など様々な比較方法が使用可能です。

If文とSelect Caseをマスターすれば条件分岐の処理については攻略出来ます。

Select Caseの使い方から、If文との使い分け方法まで丁寧に詳しく解説していきますので、ぜひ最後までご覧ください。

Select Caseとは

天馬先生
天馬先生

前回講座のIf文の使い方については理解できたかな?

たけし
たけし

はい!理解できました!

何かの値を比較した結果によって処理を分けられるんですよね!

天馬先生
天馬先生

その通り!今回はIf文と並んでよく使う条件分岐のもう1つ「Select Case」について解説するよ。

Select Caseはある特定の対象物1つに対して複数の条件を設定することが出来る条件分岐です。

VBAで次のような記載をします。

Select Case 比較対象物
    Case 条件式1
        条件1を満たした場合の処理(処理A)
    Case 条件式2
        条件2を満たした場合の処理(処理B)
    Case 条件式3
        条件3を満たした場合の処理(処理C)
    Case Else
        いずれの条件も満たさない場合の処理(処理D)
End Select
Select Caseの書き方は
  • Select Caseを最初の行に記述する
  • Select Caseの後ろに比較対象物を記述する
  • Caseの後ろに条件式を記述する
  • Caseの下の行に条件を満たした場合の処理を記述する
  • いずれの条件も満たさない場合はCase Elseを記述する
  • 最後の行にEnd Selectを記述する

Select Caseを使った条件分岐の例

さっそく「Select Case」を使った条件分岐の記述方法について見ていきましょう。

次のようなスポーツ名に対して競技の種類を判定するマクロを実行します。

before-classified

「Select Case」を使ったVBAの記述は次のようになります。

classified-sport

記述内容は以下となります。

Select Case Range(“A2”).Value
    Case “サッカー”
        Range(“B2”).Value = “球技”
    Case “トランポリン”
        Range(“B2”).Value = “体操”
    Case “マラソン”
        Range(“B2”).Value = “陸上競技”
    Case Else
        Range(“B2”).Value = “不明”
End Select

マクロ実行結果は次のようになります。

after-classified

A2セルが「マラソン」だった場合は次のようになります。

after-classified2

このように、特定の対象物1つに対して条件に応じて処理を変える場合に「Select Case」を使います。

天馬先生
天馬先生

Select Caseは更に、複数の値の指定や、範囲指定、値の大小を比較することが出来るよ。

1つの条件式に複数の値を指定する方法

1つの条件式に複数の値を指定する場合は「,」(カンマ)を使います。

カンマで区切り、いずれかの値に一致した場合にその下の処理が実行されます。

Select Case  比較対象物
    Case 値1,値2,値3
        値1,値2,値3いずれかの場合の処理(処理A)
    Case 値4,値5,値6
        値4,値5,値6いずれかの場合の処理(処理B)
    Case 値7,値8,値9
        値7,値8,値9いずれかの場合の処理(処理C)
    Case Else
        いずれの条件も満たさない場合の処理(処理D)
End Select

各条件式に3つずつ記述していますが、いくつでも値の設定が可能です。

 Case 値1,値2,値3,値4,値5・・・

VBAの記述は具体的に次のようになります。

classified-multiple

記述内容は以下になります。

Select Case Range(“A2”).Value
    Case “サッカー”, “野球”, “テニス”
        Range(“B2”).Value = “球技”
    Case “トランポリン”, “新体操”, “ストリートダンス”
        Range(“B2”).Value = “体操”
    Case “マラソン”, “走幅跳”, “砲丸投”
        Range(“B2”).Value = “陸上競技”
    Case Else
        Range(“B2”).Value = “不明”
End Select

A2セルの値によって次のように処理されます。

  • サッカー、野球、テニスの場合は「球技」
  • トランポリン、新体操、ストリートダンスの場合は「体操」
  • マラソン、走幅跳、砲丸投の場合は「陸上競技」
  • その他の場合は「不明」

マクロ実行結果は次のようになります。

after-classified3

天馬先生
天馬先生

このように複数の値を1度に記述出来るよ。

値の大小を比較する方法(Case Is)

値の大小を比較するときはCase Isを使います。

Case Is 比較演算子

比較演算子の種類については第6回講座(比較演算子の使い方)を参照ください。

前回と同じ成績表を例に解説します。

マクロ実行結果前が次のようだった場合

before-case-is

If文を使って、たけしくんの成績を評価するVBAの記述は次のようになっていました。

estimate-results4

これをSelect CaseのIsを使って記述すると次のようになります。

estimate-results-case

記述内容は以下になります。

Select Case Range(“A2”).Value
    Case Is >= 80
        Range(“C2”).Value = “優”
    Case Is >= 70
        Range(“C2”).Value = “良”
    Case Is >= 60
        Range(“C2”).Value = “可”
    Case Else
        Range(“C2”).Value = “不合格”
End Select

A2セルの値によって次のように処理されます。

比較対象(B2セル)の値によって結果は以下になります。

  • 80点以上は「優」
  • 70点以上は「良」
  • 60点以上は「可」
  • その他(60点未満)は「不合格」

マクロ実行結果は次のようになります。

after-case-is

天馬先生
天馬先生

値を比較する場合はCase Isを使うと覚えておこう

範囲を指定する方法(To)

範囲を指定する場合はToを使います。

Case 下限値 To 上限値

Isと同じように成績表で見てみましょう。

estimate-results-to

記述内容は以下になります。

Select Case Range(“A2”).Value
    Case 80 To 100
        Range(“C2”).Value = “優”
    Case 70 To 79
        Range(“C2”).Value = “良”
    Case 60 To 69
        Range(“C2”).Value = “可”
    Case Else
        Range(“C2”).Value = “不合格”
End Select

比較対象(B2セル)の値によって結果は以下になります。

  • 80点~100点の場合は「優」
  • 70点~79点の場合は「良」
  • 60点~69点の場合は「可」
  • その他(60点未満)は「不合格」

Select CaseとIf文の使い分けについて

Select Caseの使い方について解説しました。

条件に応じて処理を分けることが出来るという点ではIf文と一緒です。

では、条件分岐のIf文とは何が違うかというと、それぞれ次の特徴があります。

  メリット デメリット
Case文 範囲指定や値の大小が簡単に記述できる 1つの対象物しか条件に指定できない
If文 複数の対象物を組み合わせて1つの条件に設定できる 分岐が増えると見づらくなる

上記のそれぞれの特徴から、判断基準としては以下を目安にして頂くと良いかと思います。

  • 複数の対象物を1つの条件式に指定したい場合は「If文」
  • 分岐する条件が多い場合は「Select Case」

ただし、どちらを使うかは決まりがありません。

好みで使ってもらって問題ありません。

たけし
たけし

2つ目の条件が多い場合は「Select Case」を使うのは、なぜですか?

天馬先生
天馬先生

次の例を見てみよう。「If文」と「Select Case」どっちが見やすいかな?

範囲指定をそれぞれで記述した場合を見てみましょう。

①If文を使った場合

estimate-results-if

②Select Caseを使った場合

estimate-results-to

たけし
たけし

確かにこの場合「Select Case」を使った方が見やすいですね!

天馬先生
天馬先生

その通り!ただ、決まりはないので、それぞれのメリット・デメリットを踏まえたうえで使い分けてみましょう。

まとめ

条件分岐としてSelect Caseについて解説しました。

同じ条件分岐の「If文」との使い分けについても解説しました。

それぞれメリット・デメリットがあるため、行いたい処理に応じて使い分けましょう。

If文とSelect Caseが使えるようになれば、どんな複雑な処理も出来るようになります。

ぜひ簡単なマクロをご自身で作ってみて使い方をマスターしましょう。

最後までお読みいただき、ありがとうございました!

~天然マクロ学校~

コメント

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