Access VBAでソースコードを記載する際に、条件に応じた分岐処理をすることが多々でてきます。プログラミングをする場合に、一般的な手法ですが、VBAでも同様の制御文がありますので、紹介したいと思います。なお、VBAソースコードの作成に係る手順は以下の記事をご参照ください。
また、VBAソースコードにおける変数宣言等は、インターネット上でたやすく情報収集できますので、本記事では紹介を割愛させていただきます。
制御文の必要性について
VBAに限らず、プログラミングをする上で制御文は必要不可欠です。例えば、任意の数字に対する割り算について考えてみましょう。
ソースコードで単純に記載すると次のように書くことができます。
Sub Calc() '変数宣言 Dim Val_1 as Double Dim Val_2 as Double Dim Answer '割り算の結果をAnswerに格納する Answer = Val_1 / Val_2 End Sub
さて、このように変数同士の計算をする場合に、もしVal_2の値に「0」が入っていたらどうでしょうか。割り算は、「0」で割ることができないため、エラーが発生します。
したがって、Val_2に「0」が入った場合には別の処理をする必要があります。
これは、一つの例ですが、様々な条件分岐が要求されますので、今回は、良く使われる制御文として「If文」と「Select Case文」を紹介したいと思います。
If文について
先ほど紹介した割り算の例について、If文を用いて条件分岐をしてみましょう。Val_2に「0」が入った場合は、「ゼロで割り算はできません。」とし、それ以外の場合は計算結果をメッセージボックスで表示するようにします。この場合のソースコードは、次のように書くことができます。
Sub Calc() '変数宣言 Dim Val_1 as Double Dim Val_2 as Double Dim Answer '変数に数値を格納 Val_1 = 10 Val_2 = 2 '条件分岐: Answerに格納する内容が変化する If Val_2 = 0 Then 'Val_2がゼロの場合をTrue Answer = "ゼロで割り算はできません。" Else 'Val_2がゼロ以外の場合 Answer = Val_1 / Val_2 End if 'メッセージボックスの表示 Msgbox Answer End sub
同様に、「Val_2 = 0」とすれば、If文の条件がTrueとなり、ゼロで表示できないメッセージが表示されます。

以上で紹介したように、If文の基本構文は次のようになります。
If 条件式 Then
条件式がTrueの場合の処理
Else
条件式がFalseの場合の処理
End If
上記の例の場合は、「Val_2の値が「0」であれば」という条件式に対してTrueの場にゼロでない旨の表示を、Falseの場合は計算結果を返す処理を行うようにソースコードを記載しました。
If ElseIf文について
先ほどは、単純にTrueかFalseかの2条件に分かれる場合にIf文の活用方法を紹介しましたが、3条件以上の場合はどのように記載すればよいでしょうか。
例えば、ある値が「正」の場合、「0」の場合、「負」の場合で処理を変えたい場合を参考に見てみましょう。
Sub Calc() '変数宣言 Dim Val_1 as Integer 'Val_1に値を格納する Val_1 = 5 'Val_1の値に応じて分岐処理 If Val_1 > 0 Then 'Val_1が正の場合 Answer = "正の数字です。" ElseIf Val_1 = 0 Then 'Val_1がゼロの場合 Answer = "「0」です。" Else 'Val_1が負の場合(整数で正の数及びゼロ以外は負の数しかない) Answer = "負の数字です。" End If 'メッセージボックスの表示 MsgBox Answer End sub

このように、「ElseIf文」を用いて、複数の条件分岐をすることが可能となります。
If 条件式 Then
条件式がTrueの場合の処理
ElseIf 条件式 Then
条件式がTrueの場合の処理
ElseIf 条件式 Then
・・・
Else
条件式が上記のいずれの条件にも適さない場合の処理
End If
なお、If ElseIf文に似た制御文として、Select Case文がありますので、こちらについても紹介をします。
Select Case文について
Select Case文は、ある値に基づいて条件分岐を行う際に有効利用でき、例えば、あるIDの値に応じて処理を分岐する方法が挙げられます。
IDが次の表に示す条件とし、IDの値に応じてメッセージボックスに表示する内容を変化させてみましょう。
表1 サンプルデータ IDと内容の一覧
ID | 内容 |
1 | 鉛筆 |
2 | 消しゴム |
3 | ノートブック |
4 | ボールペン |
このようなサンプルデータにおいて、ソースコードを作成して表示される内容を確認してみます。
Sub Case_Sample() Dim ID As Integer ID = 2 Select Case ID Case 1 MsgBox "鉛筆です。" Case 2 MsgBox "消しゴムです。" Case 3 MsgBox "ノートブックです。" Case 4 MsgBox "ボールペンです。" Case Else MsgBox "1~4以外の数値がIDに指定されました。" End Select End Sub

このように、Select Case文は以下のように示すことが出来ます。
Select Case 変数
Case 条件式1
処理1
Case 条件式2
処理2
Case Else
デフォルトとして、どの条件にも一致しない場合の処理
End Select
Select Case文は条件が多岐に亘る場合に視認性を良くするためにも活用することが出来ます。
まとめ
今回紹介した制御文について、データ処理等VBAで利用することで、その業務を効率的に行うことが出来ますので、是非、活用していただければと思います。
スポンサーリンク
コメント