このサイトの記事内では「アフィリエイト広告」などの広告を掲載している場合があります。
消費者庁が問題としている「誇大な宣伝や表現」とならないよう配慮しコンテンツを制作しておりますのでご安心ください。
問題のある表現が見つかりましたらお問い合わせよりご一報いただけますと幸いです。

【VBA】値が一つならIfよりSelect Case

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

VBAが難しいと感じたら
ココナラにてVBAの作成依頼を受け付けています。
ご依頼・ご相談はこちらから

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 Select

Select CaseならCase Elseを使って、簡単に見逃し防止処理を書くことができます。

そのため、値が一つなら面倒がらずにSelect Caseを使っておくのが安全だと思います。
(ちょっとネストが増えるのがたまに傷なのですよね~)

では「【VBA】値が一つならIfよりSelect Case」でした!

《VBA上級者になりたい人へ》
VBA上級者を目指したい人にはパーフェクトExcel VBA一択です。
この本を読み切れば間違いなくVBA上級者になれます。

VBAが難しいと感じたら
ココナラにてVBAの作成依頼を受け付けています。
ご依頼・ご相談はこちらから

VBA

Posted by やろまい