今回はVBA初心者講座の第10弾
【Select Case文】についてのお話です。
Select Case文は条件分岐をするために使います。
前回はIf文を使った条件分岐のお話をしました。
でも、どうして条件分岐には2つの方法があるのか? If文と何が違うのか? 疑問ですよね。
そんな、Select Case文の特徴について見ていきましょう。
それは、本編に行ってみよう!!
Select Caseは複雑な条件分岐の時に使うのが正解
Select Caseを使う時は、複雑な条件分岐が必要な時に使いましょう。
複雑な条件分岐とは何のことでしょうか?
では、前回If文を使った登山ランキングの条件分岐を例に見ていきましょう
If文の使い方については、前回の記事を参考にしてみて下さい。
前回のランキングの順位を逆にしました。
目的は、山の名前に合わせて都道府県を自動的に設定することです。
コードはこんな感じです
Sub 登山ランキング()
'B2セルの内容によって都道府県名をC2セルに入力する
If Cells(2, 2) = "霧ヶ峰(きりがみね)" Then
Cells(2, 3) = "長野県"
ElseIf Cells(2, 2) = "美ヶ原(うつくしがはら)" Then
Cells(2, 3) = "長野県"
ElseIf Cells(2, 2) = "筑波山(つくばさん)" Then
Cells(2, 3) = "茨城県"
ElseIf Cells(2, 2) = "大台ケ原山(おおだいがはらやま)" Then
Cells(2, 3) = "奈良県"
ElseIf Cells(2, 2) = "八幡平(はちまんたい)" Then
Cells(2, 3) = "岩手県"
Else
Cells(2, 3) = ""
End If
End Sub
If文で山の名前に対して都道府県名を設定するコードです。
If文でも問題は無いですが、ちょっと複雑ですよね。
そこで、これをSelect Caseに書き換えるとこんな感じです。
Sub 登山ランキング()
'B2セルの内容によって都道府県名をC2セルに入力する
'山の名前を取得するための変数
Dim MotNam As String
MotNam = Cells(2, 2)
Select Case MotNam
Case "霧ヶ峰(きりがみね)"
Cells(2, 3) = "長野県"
Case "美ヶ原(うつくしがはら)"
Cells(2, 3) = "長野県"
Case "筑波山(つくばさん)"
Cells(2, 3) = "茨城県"
Case "大台ケ原山(おおだいがはらやま)"
Cells(2, 3) = "奈良県"
Case "八幡平(はちまんたい)"
Cells(2, 3) = "岩手県"
End Select
End Sub
こんな風にSelect Caseを使った方がコードの書き方がシンプルになりましたね。
大きな違いは、If文の場合「If 目的のセルの位置 then」という書き方を繰り返していますが、Select Caseの場合は、条件が同じなら「Case 条件」と書くことでコードがシンプルになっている点です。
Select Caseの使い所は、同じ条件で色々な結果が分かれる時です
違う条件の場合は、If文でないと対応出来ないで目的に合わせた上手な使い分けをしましょう
次はSelect Caseの基本的な書き方について見ていきましょう
Select Case文の基本的な書き方と動き
Select Caseの基本的な書き方をシンプルにしたコードで見てみましょう
Sub 登山ランキング()
'B2セルの内容によって都道府県名をC2セルに入力する
'山の名前を取得するための変数
Dim MotNam As String
MotNam = Cells(2, 2)
Select Case MotNam
Case "八幡平(はちまんたい)"
Cells(2, 3) = "岩手県"
End Select
End Sub
これで山の名前が一致していれば、都道府県名を入力出来ます。
Select Caseの基本的な書き方は
Select Case 調べたい内容
Case 調べる条件1
調べた結果の動き
Case 調べる条件2
調べた結果の動き
End Select
こんな感じで書きます
では、今回のコードを図解していみましょう
まず、変数「MotNam」にB2セルの内容をセットします。
つまり、MotNamの中身は、「八幡平(はちまんたい)」という文字が入っています。
次に「変数MotNam」の中身を調べます。
Case「調べたい内容」で 「変数MotNam」 は、 「八幡平(はちまんたい)」かどうか判断しています。
今回は内容が一致しているので、C2セルに「岩手県」という文字を入力しています。
この場合、山の名前が一致したので都道府県名を入力しましたが、山の名前が一致しない場合はどうしましょう。
そんな時は「Case Else」を使ってどの条件も満たさない場合の処理を書きます。
今回は、該当する山の名前が無かったらメッセージボックスを表示させてみましょう。
コードはこんな感じです。
Sub 登山ランキング()
'B2セルの内容によって都道府県名をC2セルに入力する
'山の名前を取得するための変数
Dim MotNam As String
MotNam = Cells(2, 2)
Select Case MotNam
Case "八幡平(はちまんたい)"
Cells(2, 3) = "岩手県"
Case Else
MsgBox "探している山の名前が見つかりません"
End Select
End Sub
これで探している山の名前が見つからない時にメッセージを表示することが出来ます。
ただし、「Case Else」は使わなくてもOKです。
なぜなら、該当する山の名前が見つからない場合は何もせずに次のコードに移るので、「Case Else」を書かなかったとしてもあまり困ることが無いからです。
もちろん、当てはまる項目が有るか無いか調べたいのであれば必要です。
ただ検索という意味では、他にもやり方があるので目的に応じて使い分けましょう。
条件を増やしたい時は、冒頭で紹介したように「Case 調べたい内容」と「調べた結果の動き」を増やしてあげれば設定出来ます。
If分よりも使いやすい場合があるので、特徴と基本的な使い方を抑えておきましょう。
数字を使って条件を切り分ける
では、少しだけプログラミングっぽいことをやってみましょう
目的は年齢別のオススメのキャンプ場を調べるという機能を作ります。
つまり、0~2歳児を連れて行くならこのキャンプ場だよ。
と表示してくれる機能を作るのでまずは一覧表を見てみましょう
この表を元に年齢を入力するとキャンプ場の名前を表示してくれるプログラムを作ります。
やり方は、すごく簡単なのでコードも見ていきましょう
Sub 年齢別オススメキャンプ場()
'山の名前を取得するための変数
Dim Age As Integer
Age = InputBox("年齢を入力して下さい")
Select Case Age
Case Is < 3
MsgBox Cells(2, 1)
Case Is >= 6
MsgBox Cells(4, 1)
Case Is >= 3
MsgBox Cells(3, 1)
End Select
End Sub
これだけです。簡単でしょ。
ただ新しくInputBox(インプット・ボックス)が出てきたので解説します。
InputBoxの基本的な書き方は、「InputBox(“タイトル名”)」これだけです。
今回のコードを実行するとこんな風に表示されるので年齢の数字を入れてあげましょう。
年齢を入力すると、年齢に合わせたキャンプ場の名前を表示してくれます。
InputBoxは、入力された文字や数字をコードに読み込んでくれる機能です。
今回の場合は、Ageという関数にInputBoxで任意の数字(年齢)を入力してもらい、数字(年齢)に合ったキャンプ場の名前をメッセージボックスで表示しています。
文章にすると複雑そうですが、結果を見ると簡単ですよね。
そして、今回のポイントは演算子を使う場合「Case Is 演算子 数字」としているところです。
あとは、基本的に同じですが、少しむずかしいので今はこんなことも出来るんだと思ってもらえれば十分です。
今回は、比較的簡単にプログラミングっぽいことが出来るのでコードをコピペして遊んでみて下さい。
コードの10~13行目ですが書き方に注意が必要です
一見「Case Is >= 6」と「Case Is >= 3」の順番が逆に見えます
ところがこうしないと上手くいきません。なぜなら3以上の場合(仮に5だったら)3以上なのでそこで処理が終わってしまうからです
その対策の為に先に6以上か先に調べる必要があります。今回は順番には理由があることだけ知っておいて下さい
まとめ
今回はSelect Case文の基本と使い方についてお話してきました。
Select Case文はIf文に比べると使う頻度は少なめですが、コードをまとめたり少なくすることが出来るので大きなメリットになります。
コードはなるべくシンプルでスマートな方が良いので、ぜひIf文で条件分岐が複雑になりすぎていたらSelect Case文でシンプルにしてあげて下さい。
使い慣れると、「やっほ~ ~ ~ !!! スッキリしたぜ」という快感が体験できるのでぜひ覚えてみましょう。
上手に使い分けてあげて下さいね。
最後まで読んでいただきありがとうございました。
それでは次回またお会いしましょう
バイバイ!!!
コメントを残す