PR

Access VBA 制御文・条件分岐の書き方

VBA

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となり、ゼロで表示できないメッセージが表示されます。

図1 If文条件の違いによる結果

以上で紹介したように、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
図2 If ElseIf文条件の違いによる結果

このように、「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
図3 Select Case文条件の違いによる結果

このように、Select Case文は以下のように示すことが出来ます。

Select Case 変数
 Case 条件式1
   処理1
 Case 条件式2
   処理2
 Case Else
   デフォルトとして、どの条件にも一致しない場合の処理
End Select

Select Case文は条件が多岐に亘る場合に視認性を良くするためにも活用することが出来ます。

まとめ

今回紹介した制御文について、データ処理等VBAで利用することで、その業務を効率的に行うことが出来ますので、是非、活用していただければと思います。

スポンサーリンク

Kindle Unlimitedにサインアップして無料体験に登録する
Kindle Unlimitedに登録すると、人気のシリーズ、ベストセラー、名作などに好きなだけアクセスして、シームレスなデジタル読書体験を実現できます。

コメント

タイトルとURLをコピーしました