ACCESS DLookUp関数で対象レコードがない場合の処理

DLookUp関数で対象レコードがない場合の処理

ACCESSでよく利用する関数の一つに、DLookUp関数があります。
テーブルの値を参照するための関数で、非常に利便性が高いものです。

このDLookUp関数は、テーブル内の特定レコードを条件抽出して、そのレコードの特定フィールドの値を返します。
しかし、このレコード抽出条件に合致するレコードがなかった場合はどうなるのでしょう。

今回は、DLookUp関数で対象レコードがない場合の処理をご紹介します。


こんにちは。
はこにわガジェット (@hakoniwagadget) です。

ACCESSを使った売上管理、顧客管理などのデータベース開発を行っています。
ACCESSは基本機能だけでも十分便利ですが、VBAを使うことで格段に使いやすいデータベースを作成可能です。
この記事ではACCESSでのVBAの使い方をご紹介していきます。

DLookUp関数で対象レコードがない場合の反応

最初に結論からお伝えすると、DLookUp関数では抽出条件に指定した対象レコードがない場合は、Nullが返されます。
エラーにはなりませんのでご安心ください。

では、DLookUp関数で対象レコードがない場合の処理方法をご紹介していきます。

DLookUp関数とは

DLookUp関数は、テーブルの値を一定の条件で抽出し、指定したフィールドの値を変える関数です。

以下の構文で利用します。

DLookup ( 値を返すフィールド , レコード セット , データ範囲を制限する文字列式 )

例えば、売上情報が格納されたテーブルから特定の売上レコードを指定し、そのレコードの顧客名を返す、といった使い方ができます。

フォームでのDLookUp関数の動作検証

実際の挙動を確認するために、DLookUp関数を使ったフォームを作成しました。

売上IDに値を入力して「反映」ボタンを押すと、その売上IDに対応した顧客名が表示されるようになっています。
反映ボタンには以下のイベントプロシージャを設定してあります。


 Private Sub 反映_ボタン_Click()

    Me!顧客名 = DLookup("顧客名", "TRN_売上サンプル", "売上ID = " & Me!売上ID)

 End Sub
 

DLookUp関数を使って、TRN_売上サンプルテーブルから、フォームに入力された売上IDのレコードを抽出し、その顧客名フィールドを返す、というい指定をしています。

参照しているTRN_売上サンプルテーブルはこちらです。

例えば、フォームの売上IDに1を入力して反映ボタンを押すと

売上IDが8の場合だと

というように顧客名が売上IDに応じて変更されます。

では、参照しているテーブルに無い売上ID100を指定するとどうなるでしょう。

このように空白になります。
これがDLookUp関数で対象レコードがない場合の挙動となります。

DLookUp関数で対象レコードがない場合にエラーメッセージを表示する

対象レコードがない場合も特にACCESS側でエラーは出ないので動作に支障はないのですが、あえてメッセージを出してユーザーが入力した値が誤っていることを知らせたい場合があります。

こうした場合は、DLookUp関数の戻り値を使ってIf文でメッセージを出しましょう。
例えば、イベントプロシージャを以下のように変更します。


 Private Sub 反映_ボタン_Click()

    If IsNull(DLookup("顧客名", "TRN_売上サンプル", "売上ID = " & Me!売上ID)) = False Then

        Me!顧客名 = DLookup("顧客名", "TRN_売上サンプル", "売上ID = " & Me!売上ID)

    Else
    
        MsgBox "指定した売上IDは存在しません。" & vbCrLf & "売上IDを再指定してください。", vbCritical + vbOKOnly, "売上ID指定不備"
        
    End If

 End Sub
 

DLookUp関数の戻り値をIsNull関数でチェックし、False、つまりDLookUp関数の戻り値がNullではない場合はMe!顧客IDに値を反映し、Else、つまりNullだった場合はMsgBox関数でエラーメッセージを出すようにしています。

実際にフォームでID100を再入力してみましょう。

このようにエラーメッセージが表示されます。

DLookUp関数の戻り値を使った制御を利用して、ユーザーの予期しない行動にも対応した処理を作成しておくとACCESSデータベースの完成度を高めることができるでしょう。

以上、DLookUp関数で対象レコードがない場合の処理をご紹介しました。


ACCESSを使いこなせば、業務の効率化や自動化が実現できます。
しかし、自分でACCESSを学ぶには時間がない、難しそうで不安、という方も多いでしょう。

そんな時は、ACCESS開発歴20年以上、過去に100以上のACCESSデータベースを開発してきた私(@hakoniwagadget)にお任せください。

ACCESSの新規開発、既存のACCESSの修正、ACCESSの操作レッスンなど様々なサービスをご提供しています。
ご興味のある方は下記のサービス一覧をご覧ください。

サービス一覧

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