【Access】if文が複数入っているVBAコードの考え方は『サンドイッチ』

Accessを使っている時にVBAコードのif文で、あれ?イベントの発動がおかしいなぁと思ったり、elesが多過ぎてどことどこで挟んでいるのか訳が分からなくなったりしませんか??

selectcaseを使えばいいのかもしれませんが、私はif文が好きなんです(笑)

Accessでifを多様しすぎて、elesとendifがどこのifからきているのかわけがわからなくなってしまうことが多々あるので、今日はそんな時の考え方のお話です。

【Access】if文の中にifを使うことを『ネスト(入れ子)』という

Accessでif文の中にifをまた入れたりすることを『ネスト』や『入れ子』とか呼んだりします。

ネスト(入れ子)とは??

ネストとは、構造化プログラミングにおいてプログラムを構築する手法の一つで、あるルーチンやデータブロックの中に、別のルーチンやデータブロックがはめ込まれることである。入れ子構造とも呼ぶ。ループ文の中のループやルーチン内でにサブルーチンコール、関数呼び出しの引数に関数呼び出しを使うこと、コメントを含む文全体のコメント化など、多くの種類がある。

出典:IT用語辞典-Weblio辞典-

どんな例があるのか実際に私が作ったAccessVBAコードのif文をご紹介します。

ネスト例
Private Sub 実行_Click()
Dim iCnt As Integer
iCnt = DCount("*", "商品リストQ") - DCount("バーコード", "商品リストQ") 'バーコード部分の空欄確認
 
 If iCnt = 0 Then
Dim ZT  As String
Dim DT  As String
 Dim rc As VbMsgBoxResult
    rc = MsgBox("『管理者用商品リスト』を作成します。よろしいですか?", vbYesNo + vbQuestion)
    If rc = vbYes Then
    
    
   DoCmd.OpenReport "商品リストR", acviewnomal
      
    Dim RCount As Long
      RCount = DCount("*", "商品リストQ") '商品リストが空っぽ
If RCount = 0 Then
      
      
   MsgBox "データがありません!データを確認してから押してください。", vbCritical
      
Else
End If
Else
 
 MsgBox "処理を中止します", vbCritical
 
End If
Else
   MsgBox "バーコードが空欄なものが " & iCnt & "件 あります。"
End If
End Sub

if文はとても便利な関数ですが、私のように入り子をして多用しすぎるとどこの部分のifをしめているかわからなくなってしまいます。

その時の考え方として大切なのは『if文のしめは外から挟むようにしめる』ということです。

文章説明が下手なので分かりにくいかもしれませんので、色を付けてみたいと思います。

簡単なイメージだとこんな感じで挟み込んでいます。

【Access】上記if文の意味(解説)

最初の青い部分のIfは商品リストQのバーコードフィールドが空欄かどうかを確認しています。

次の緑の部分は『管理者用商品リスト』を作成していいのか、ダメなのかを聞いています。

最後のピンクの部分は商品リストにデータそのものがあるかないか(0件かどうか)を判断しています。

まとめ

AccessのVBAコードはif文が複数出てきて分かりにくいコードも『サンドイッチ』の考え方でわかりやすく分解することが出来ます。

コードが長すぎて訳が分からなくなった時に立ち止まって『サンドイッチ』で考えてみてください。

最後までお読みいただきありがとうございました。

この記事を読んだ方へおすすめの本
カテゴリー:
関連記事