【VBA】値が一つならIfよりSelect Case
今回はSelect Caseの使いどころと、最近私がIfでなくSelect Caseで書けば良かったなと後悔した内容を紹介したいと思います。
Select Caseの使いどころ

例えば、このような表があって、マクロによって商品に応じた金額をC列に入力したいとします。
If Cells(i, "B") = "ABC" Then
End If
If Cells(i, "B") = "BCA" Then
End If
If Cells(i, "B") = "CAB" Then
End If
...その場合、Ifで書こうとすると、このようにIf文を商品名の数だけ無数に書く必要があります。
Select Case Cells(i, "B")
Case "ABC"
Case "BCA"
Case "CAB"
End SelectこれをSelect Caseにするとこのようにスッキリした内容で済みます。
一番良いのは、読み返すときに「Select Case Cells(i, “B")」この一文を読むだけで大体の内容が分かる点です。
Select Caseはプログラムの処理的なメリットもさることながら読みやすさに強いメリットがあります。
値が一つならIfよりSelect Case
ではIfにするかSelect Caseにするかはどう判断すればいいでしょうか?
これは値が1つであるかどうかで判断するのが向いています。(今回ならCells(i, “B"))
例えば、obj Is Nothingのような内容だとIfでしか書くことができません。
つまり、Select Caseで書けるなら大抵はSelect Caseにした方が良いというのが結論です。
少なくともCaseが3個以上あれば間違いなく、Select Caseが優先です。
Select Caseで書けば良かったなと後悔した内容
これはですね、最初Caseが2個しかないからとIf Elseのみにしたのですが、実は気付いていない3個目のパターンが存在していました。
If Cells(i, "B") = "ABC" Then
処理A
Else
処理B
End Ifつまり、このような2つに分岐するコードを書いていました。
Cells(i, “B")は"ABC"と"BCA"の2つしかないという想定だったのですが、実は"CAB"がありまして、、、
ただ、"CAB"が来てもこのコードだと処理Bがそのまま流れてエラーにはならず、なぜ思ったような結果とならないのかと悩むハメになったわけです。
Select Case Cells(i, "B")
Case "ABC"
Case "BCA"
Case "CAB"
Case Else
Err.Raise 10000
End SelectSelect CaseならCase Elseを使って、簡単に見逃し防止処理を書くことができます。
そのため、値が一つなら面倒がらずにSelect Caseを使っておくのが安全だと思います。
(ちょっとネストが増えるのがたまに傷なのですよね~)
では「【VBA】値が一つならIfよりSelect Case」でした!
