2018年8月11日土曜日

【エクセルVBA】条件一致のときだけ処理する(if / select case)

event_note8月 11, 2018

条件によって処理を変えたいときに使います。

if文

書き方

  • 条件式1が成立する場合、処理1を実行します。
  • 条件式2が成立しない場合、処理2を実行します。
  • それ以外は処理3を実行します。
  • elseif、elseは省略可
if 条件式1 then 処理1elseif 条件式2 then 処理2else 処理3endif

 

使用例


Rankが1~3なら「表彰台」、4~8なら「入賞」、それ以外なら「頑張りました。」を表示します。以下は、Rankが9なのでIf,ElseIfの条件が成立しないため、else「頑張りました。」が表示されます。

Rank = 9If (1 <= Rank) And (Rank <= 3) Then jusho = "表彰台"ElseIf (4 <= Rank) And (Rank <= 8) Then jusho = "入賞"Else jusho = "頑張りました。"End If MsgBox jusho

実行結果

Select case文

書き方

select case 変数 case 値1 処理1 case 値2 処理2 … case else 処理3end select
  • 変数が値1に一致する場合は処理1を実行し、end selectに移ります。
  • 変数が値2に一致する場合は処理2を実行し、end selectに移ります。
  • 値1、2に当てはまらない場合、処理3を実行し、end selectに移ります。
  • case elseは省略可能です。

使用例


家族(family)が「こども」なら「こども料金」、「祖父母」なら「シニア料金」、その他なら「通常料金」を表示します。

family = "祖父母"Select Case family Case "こども" Price = "こども料金" Case "祖父母" Price = "シニア料金" Case Else Price = "通常料金"End SelectMsgBox Price

実行結果

最初に一致したcaseの処理のみ実行


以下の例では、「赤」が2つのcaseにありますが、最初のcaseの処理のみ実行され「暖色1」が表示されます。

sColor = "赤"Select Case sColor Case "赤", "オレンジ" kind = "暖色1" Case "赤" kind = "暖色2"End SelectMsgBox kind

実行結果

 

caseは範囲指定も可


年齢別に学校を表示します。以下の例ではage(年齢)が10なので、「Case 6 to 12」の処理が実行され、「小学校」が表示されます。

age = 10Select Case age Case 6 To 12 school = "小学校" Case 13 To 15 school = "中学校" Case 16 To 18 school = "高校"End SelectMsgBox school

実行結果

caseは列挙による指定も可


foodに設定した食べ物を「くだもの」「野菜」「その他」の種類に分けて、メッセージボックスに表示します。

下記では、foodに「きのこ」なので、Case Elseの処理を実行し、「その他」が出力されます。

food = "きのこ"Select Case food Case "桃", "柿", "りんご" kind = "くだもの" Case "ニンジン", "キャベツ", "トマト" kind = "野菜" Case Else kind = "その他"End SelectMsgBox kind

実行結果

if とcaseの使い分け

・if…分岐が少ない場合、AND,ORを使った複雑な条件になる場合
・case…分岐が多く、一致するかどうかを調べる単純な判別

というふうにするとよいです。分岐が多い場合は、caseにすると見た目もすっきりして見やすくなります。