ACCESS VBA Select Caseで条件分岐する方法
ACCESS VBAでは条件分岐をよく利用します。
条件分岐に利用する構文で最もよく利用されるのがIf文ですが、それ以外にSelect Caseも使えると便利です。
今回は、ACCESS VBAでSelect Caseで条件分岐する方法をご紹介します。
こんにちは。
はこにわガジェット (@hakoniwagadget) です。
ACCESSを使った売上管理、顧客管理などのデータベース開発を行っています。
ACCESSは使いこなすために少しスキルが必要なものの、うまく活用すればExcelよりも業務の効率化が図れます。
この記事ではACCESSをもっと使いこなしたい方向けにACCESSの関数をご紹介していきます。
Select Caseの構文
Select Caseステートメントは条件分岐を記述するためのものです。
以下の構文で利用します。
Select Case [判定する数式や変数]
Case [判定する値1]
合致した場合の処理1
Case [判定する値2]
合致した場合の処理2
Case [判定する値3]
合致した場合の処理3
End Select
Select Caseの後に記述した判定する数式や変数の値に応じて複数に分岐させることが可能です。
Case以降はいくつでも分岐させることが可能です。
If文との使い分け
Select Caseと同様に条件分岐に利用する構文にIf文があります。
If 文とSelect Caseはどのように使い分ければよいでしょうか。
まず基本的に、どちらを使っても同じ処理は作成可能です。
If文を使って先ほどのように複数に分岐する処理を記述すると以下のようになります。
If [判定条件1] then
合致した場合の処理
ElseIf [判定条件2]
合致した場合の処理
ElseIf [判定条件3]
合致した場合の処理
End If
If文の場合は判定結果が複数に分岐する処理は若干分かりにくくなります。
Select Caseではすべてのパターンを並列に扱いますが、If … ElseIfでは最初の条件に合致しなかった場合に次の条件判定に移るので条件に考慮が必要です。
そのため、同一判定条件で結果が複数に分かれる場合はSelect Case、判定するたびに条件が異なるような複雑な分岐がある場合はIf文と使い分けるとよいでしょう。
Select Caseを使ったプロシージャの例
最後に、Select Caseを使ったVBAのプロシージャの例を示します。
以下は、フォームの詳細セクションをロックして編集不可にするプロシージャです。
Public Sub form_detail_lock(form_name As String)
'■■■フォームの詳細セクションのロックをする■■■
For Each ctl In Forms(form_name).Section(acDetail).Controls
Select Case ctl.ControlType
Case 109, 110, 111
'109:テキストボックス、110:リストボックス,111:コンボボックスの場合
ctl.Enabled = False
ctl.Locked = True
ctl.BackColor = 15921906
Case 106, 108, 112, 119, 122
'106:チェックボックス、108:連結オブジェクトフレーム、112:サブフォーム、119:ActiveXコントロール、122:トグルボタンの場合
ctl.Enabled = False
ctl.Locked = True
Case 104
'104:コマンドボタンの場合
ctl.Enabled = False
End Select
Next
End Sub
フォームには様々なコントロールがありますので、コントロールの種類によって処理内容を変えないといけません。
そこで、Select Caseを使ってコントロールタイプを判別しながら、フォームの詳細セクションにあるすべてのコントロールにロック処理をしています。
以上、Select Caseで条件分岐する方法をご紹介しました。
ACCESSを使いこなせば、業務の効率化や自動化が実現できます。
しかし、自分でACCESSを学ぶには時間がない、難しそうで不安、という方も多いでしょう。
そんな時は、ACCESS開発歴20年以上、過去に100以上のACCESSデータベースを開発してきた私(@hakoniwagadget)にお任せください。
ACCESSの新規開発、既存のACCESSの修正、ACCESSの操作レッスンなど様々なサービスをご提供しています。
ご興味のある方は下記のサービス一覧をご覧ください。
最後までお読みいただき、ありがとうございました。