条件分岐には『IF文』と『Select Case文』があります。
この2つにはそれぞれ特徴があり、使い分けが重要になります。
本記事ではそんな『Select Case文の記述の仕方』から『IF文との使い分け』について解説していきます。
IF文だけで条件分岐をしようとすると、コードの可読性が落ちるので、ぜひSelect Case文も使えるようにしておきましょう!
Select Caseの記述方法
ここでは「Select Caseステートメントの書式」「ざっくりとした参考コード」について解説していきます。
Select Caseステートメントの書式
Select Caseステートメントの記述の仕方は下の通りです。
上の『評価する値』は「数値・文字列・プール型(Trueなど)・日付」いずれかを指定します。
次に、それに続く『条件』では『評価する値』に一致したかどうかを判断します。
その『条件』では「=」はもちろん、「演算子(<など)」「論理演算子(ANDなど)」などを使うことができます。
加えて、複数の数値を条件にする場合は「To(“1 To 10″といった感じ)」を使うことができます。
そして、最後にそれらの『条件』のどれにも一致ない場合にはElse処理が行われます。
Select Caseの参考コード
Select Caseステートメントについて理解するために、簡単な参考コードを解説していきます。
文字列を判定する参考コード
まず、下は”変数strに「田中」「佐藤」が含まれているかを判定する”という内容のコードになっています。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
Sub sample1() Dim str As String str = "田中太郎" Select Case True Case str Like "田中*" Debug.Print "文字列の姓は「田中」です" Case str Like "佐藤*" Debug.Print "文字列の姓は「佐藤」です" Case Else Debug.Print "文字列は「田中」「佐藤」とは関係がありません" End Select End Sub |
上のコードでは7行目に『評価する値』に”True”を指定しています。
これにより、条件での判定がTrueになったときに処理が実行されるようになっています。
そして、条件1には『Like演算子』とワイルドカードである『*』を使って、変数strの文字列に「田中」が含まれているかどうかを判定しています。
今回は変数strに「田中太郎」が代入されているので、条件1の処理が実行されます。
ちなみに上のコードを実行すると下のような結果になります。
複数の値を条件に加える参考コード
また、Select Case文では条件上の値を「,(カンマ)区切り」で列挙することができます。
下では”条件に複数の数値を指定”しています。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
Sub sample2() Dim i As Long i = 3 Select Case i Case 1, 3, 5, 7 Debug.Print "変数iは奇数です" Case 2, 4, 6 Debug.Print "変数iは偶数です" Case Else Debug.Print "警告:1から7までの数字を指定してください" End Select End Sub |
上のコードでは7行目に『評価する値』に”変数i(3)”を指定しています。
次に、8行目の『条件』では”1,3,5,7”の4つの数値を指定しています。
これにより、今回は8行目の条件が一致します。
ちなみに上のコードを実行すると下のような結果になります。
【注意】複数の条件が一致した場合
Select Case文ではときに複数の条件が一致してしまう場合があります。
そんなときには”初めに一致した条件の処理のみが実行される”ことを覚えておく必要があります。
なので、『評価する値』と『条件』の指定の際は工夫を忘れないようにしましょう。
IF文とSelect Case文の使い分け
条件分岐には『Select Case文』と『IF文』があります。
そして、どんな場合でも条件分岐にはIF文を使っている人が結構多かったりします。
ですが、IF文の場合、条件が多いときにはIF文の中にIF文を記述することもあり、その場合コードが見にくくなる(可読性が落ちる)傾向にあります。
なので、複数の条件がある時にはSelect Case文を用いてコードを見やすくするようにしてみましょう。
試しに『IF文』と『Select Case文』で同じ処理を行ってみます。
下の表に「点数(D列)の数値が80以上なら”A”、80未満で60以上なら”B”、それ以外は”C”と評価(E列)に表示する」という内容でコードを書いてみます。
では、まず『IF文』からです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
Sub sample3() Dim i As Long For i = 3 To 7 If Cells(i, 4) >= 80 Then Cells(3, 5) = "A" Else If Cells(i, 4) >= 60 Then Cells(i, 5) = "B" Else Cells(i, 5) = "C" End If End If Next i End Sub |
次に『Select Case文』です。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
Sub sample4() Dim i As Long For i = 3 To 7 Select Case Cells(i, 4) Case Is >= 80 Cells(i, 5) = "A" Case Is >= 60 Cells(i, 5) = "B" Case Else Cells(i, 5) = "C" End Select Next i End Sub |
どうでしょうか。
IF文よりもSelect Case文のほうが規則正しく並んでいて見やすいと感じませんか!
このように複数の条件がある場合は『Select Case文』、条件が少ない場合は『IF文』で使い分けるのがお勧めです。
1位 | 2位 | 3位 |
---|---|---|
Excel VBA 脱初心者のための集中講座 | パーフェクトExcel VBA | ExcelVBA 実戦のための技術 |
初心者~中級者 | 中級者 | 初心者~中級者 |
【初心者が手に取るべき参考書】 ・「書籍+動画」で圧倒的に理解しやすい入門書になっている。 ・丁寧で詳しい解説でボリューム感がある。 | 【より深い理解をしたい方にお勧めな参考書】 ・テーマに対して丁寧な解説・適度な深さで解説されている。 ・幅広くテーマを扱っていることから、基礎知識をあらかた網羅できる。 | 【入門書と一緒に買うべき参考書】 ・1つ1つのテーマを経験豊富なエンジニア視点で解説してくれている。 ・実践的で効果的なコードの書き方が理解できる。 |
【読んでみた一言】 正直、入門書はコレ一冊でいいかも。あとは中級者用の参考書に進むべし。 | 【読んでみた一言】 深く書かれているが、少々専門的に書かれていることから、読む前に数冊の入門書を読破したほうが良い。 | 【読んでみた一言】 基礎知識を持っている人が次のレベルに達するきっかけを与えてくれる参考書である。 |
スポンサーリンク