ACCESS 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の操作レッスンなど様々なサービスをご提供しています。
ご興味のある方は下記のサービス一覧をご覧ください。
最後までお読みいただき、ありがとうございました。