【Access】VBA Select Caseで条件分岐する方法

 

アクセス担当のまみです。

 

VBA初心者だとIFをよく使うし、ほとんどIFで終わらせることも多いかな。

 

IFって複数の条件に対応可能で、入れ子にもできて便利だけど、条件が多くなってくると、だんだんコードが見づらくなります。

 

 

IFを使った処理を、Select Caseに書き換えてみると、コードが見やすくなるのでおススメです。

 

Contents

Select Case

 

構文
Select Case 変数
   Case 条件式1
      処理1
   Case 条件式2
      処理2
       ・
       ・
   Case Else
                  条件にあてはまらなかった時の処理
End Select

 

(あいちゃん)
Select Caseの基本の構文だよ。

 

(はてな君)
確かに見やすいかも!

 

(あいちゃん)
Caseを使っていくつでも条件を分岐できるよ。

 

 

Select Caseで4つに条件分岐

 

(はてな君)
Select Case早く使ってみた~い!

 

(あいちゃん)
じゃあさっそくやってみよう!
フォームにデータを入力してチェックするプログラムだよ!

 

使用するフォーム

 

 

ラベルとテキストボックス、ボタンを1つずつ配置しましょう。

 

ラベル 「A~Cを入力してください」

テキストボックスの名前 「tx入力1」

ボタンの名前 「btnチェック」

ボタンの標題 「チェック」

 

 

フォームの作り方の詳細は下記の記事をどうぞ!

 

アクセスVBAでフォームにボタンを配置しよう

2018年9月18日

 

 

 

①「btnチェック」を選択した状態で、プロパティシートの②「イベント」タブを選択して「クリック時」に「イベントプロシージャ」を選びコードの画面を表示します。

 

「Private Sub btnチェック_Click()」と「End Sub」の間に下記のコードを記載しましょう。

 

Dim check1 As String
    
check1 = Nz(Me.tx入力1.Value)

    Select Case check1
        Case "A"
            MsgBox "Aが入力されました"
        Case "B"
            MsgBox "Bが入力されました"
        Case "C"
            MsgBox "Cが入力されました"
        Case Else
            MsgBox "A~Cを入力してください"
    End Select

 

 

 

コードをコピーされたい場合は下記の記事を参考にしてください。

 

関連記事
 
 

 

テキストボックスに「A~C」が入力されたらそれぞれのメッセージボックスが表示されます。

 

テキストボックスに「A~C」以外の入力があった場合は「A~C」の入力を求めるメッセージボックスが表示されます。

 

 

(あいちゃん)
Caseの後の条件は今回は文字列なので””で囲むんだよ!
数値の場合だと””で囲まなくてもいいんだけどね。

 

(はてな君)
そっか。文字列は””で囲むんだね。いつもわからなくなるんだ・・・

 

 

フォームビューに切り替えて動作確認をしてみましょう。

 

 

 

(はてな君)
Bを入力してみたよ!

 

 

(あいちゃん)
色んなパターンで試してみてね!コードを間違って入力しているってこともあるから!

 

(はてな君)
わかった!

 

 

Select Caseを入れ子(ネスト)にする

 

(はてな君)
入れ子ってSelect Caseの中にどんどんSelect Caseを入れていくんでしょ!

 

(あいちゃん)
そうそう。ちょっと複雑な条件分岐ができるんだよ!
ラベルとテキストボックスを1つずつ加えてやってみよう!

 

 

ラベルは「(1)Aを入力してください」と変更

追加するテキストボックスの名前 「tx入力2

追加するラベル「(2)A~Cを入力してください

 

 

 

 

「Private Sub btnチェック_Click()」と「End Sub」の間に記載するコードは下記になります。

 

 

check1 = Nz(Me.tx入力1.Value)
check2 = Nz(Me.tx入力2.Value)

    Select Case check1
        Case "A"
            Select Case check2
                Case "A"
                    MsgBox "(2)にAが入力されました"
                Case "B"
                    MsgBox "(2)にBが入力されました"
                Case "C"
                    MsgBox "(2)にCが入力されました"
                Case Else
                    MsgBox "(2)にA~Cを入力してください"
            End Select
        Case Else
            MsgBox "(1)にAを入力してください"
    End Select

 

 

(あいちゃん)
しっかり動作確認してみてね!

 

(はてな君)
わかった~!

 

Select Caseを複数条件で使用する

 

 

(はてな君)
あっそうそう。2つ目のテキストボックスにA~Cが入力された時に「A~Cが入力されました」みたいに同じメッセージを出したい時ってどうするの?

 

(あいちゃん)
あ~「or」を使いたいってことだね。

 

(はてな君)
うん。AまたはBまたはCが入力された時ってしたいんだ。

 

(あいちゃん)
「,」で区切ればいいんだよ。

 

Dim check1 As String
Dim check2 As String
    
check1 = Nz(Me.tx入力1.Value)
check2 = Nz(Me.tx入力2.Value)

    Select Case check1
        Case "A"
            Select Case check2
                Case "A", "B", "C"
                    MsgBox "(2)にA~Cが入力されました"
                Case Else
                    MsgBox "(2)にA~Cを入力してください"
            End Select
        Case Else
            MsgBox "(1)にAを入力してください"
    End Select

 

 

(はてな君)
「,」で区切るだけなんだ。簡単だね!

 

 

下記の記事でIFを使って同じようなプログラムを作成しています。

ぜひ見比べてみてください!

 

【Accsess】VBAのIFを使って複数条件の分岐をする方法

2018年11月27日

 

フォームは「F_Select」と名前をつけておきましょう。

 

Access VBA Select Caseで範囲指定や比較条件の設定

2018年12月22日

 

まとめ

 

Select Caseを使うとコードがとっても見やすくなるので、ぜひ覚えてくださいね!

 

コードを短く見やすくすると、バグも少なくてあとで機能の追加をしたい時にわかりやすいですよ!

 

スポンサーリンク