【Access関数】DLookup関数の使い方|構文・具体例

入門講習

DLookup関数は、テーブルやクエリからレコードを検索し、指定したフィールドの値を返してくれる関数です。この記事では、基本的な構文や、具体的な使い方について解説します。

DLookup関数とは

テーブルやクエリから条件に一致する値を1件だけ取得する関数です。定義域集計関数と呼ばれる関数の一種です

構文

DLookupの基本構文

DCount(フィールド名, テーブル名, 抽出条件)

各引数の内容は次のとおりです。

引数必須/任意内容
フィールド名必須値を取得するフィールド名
テーブル名必須取得するフィールドが属するテーブル名やクエリ名
抽出条件任意SQLのWHERE句に相当する条件式

DLookup関数は、複数のデータが該当する場合でも最初の1件目だけを取得します。
よって、あくまで抽出条件は任意ですが、実務では必ず抽出条件を指定します。

具体例

次のテーブルを元に、DLookup関数で値を参照する基本的な具体例を解説します。

【参照元テーブル(M_社員マスタ)】

【具体例】

DLookup("社員名", "M_社員マスタ", "社員コード='1000000002'")

【解説】

上記のDLookup関数は、抽出条件として社員コードが1000000002社員名を取得する、という命令です。実行結果として、社員名の田中を取得することができます。

なお、本事例では抽出条件に使用した社員コードフィールドが文字列型であるため、条件の値をシングルコーテーション(’)で囲む必要があります。日付型であればシャープ(#)で囲む、数値型であれば不要です。

使用例

上記は最も基本的な具体例ですが、DLookup関数はAccess内の様々な場所で使用することができます。ここでは、フォームのコントロールソース、VBA、クエリで使用する例をご紹介します。

フォームのテキストボックスで使用

フォームに配置したテキストボックスのコントロールソースにDLookup関数を設定することで、抽出条件である他のテキストボックスの値に応じた、結果を取得することができます。

【具体例】

=DLookUp("社員名","M_社員マスタ","社員コード='" & [テキスト4] & "'")

【解説】

前述の基本的な具体例では、抽出条件に値を直接指定していますが、入力した内容によって動的な抽出条件を実現することもできます。

テキスト4という非連結テキストボックスに入力した値に応じて、テキスト7に結果の値を表示します。例えば、テキスト4に1000000006と入力してEnterキーを押すと、テキスト7に伊藤が表示されます。

VBA内で使用

VBAでDLookup関数を使う場合は、取得した値を変数に格納するパターンが多く見受けられます。

【具体例】

Private Sub btnLogin_Click()

Dim strPass As String
strPass = Nz(DLookup("パスワード", "T_ユーザー", "ユーザーID='" & Me.txtUserID & "'"), "")
    
    If strPass = "" Then
        MsgBox "ユーザーIDが存在しません。", vbCritical
    ElseIf strPass = Me.txtPassword Then
        MsgBox "ログイン成功!"
        DoCmd.OpenForm "F_メニュー"
    Else
        MsgBox "パスワードが違います。", vbExclamation
    End If

End Sub

【解説】

ツールのログイン画面で、入力したIDとパスワードを判定するパターンです。
テキストボックスtxtUserIDに入力された値と一致するパスワードをT_ユーザテーブルから抽出し、変数strPassに格納します。
次にIf関数で変数strPassの値を判定し、結果によりフォームを開いたり、エラーのメッセージを表示します。

クエリで使用

DLookup関数は、クエリのデザイングリットで使用するケースもあります。
具体例については、こちら↓の記事の「DLookup関数を使用した抽出」で詳しく解説しています。

まとめ

DLookup関数とは
 テーブルまたはクエリから、条件に合うレコードの中から指定したフィールドの値を 1 件だけ取得する関数。

構文
DLookup(フィールド名, テーブル名, 抽出条件)最後に記事の要点をまとめます。

ポイント

  • 複数ヒットしても最初の 1 件のみを返す。
  • 抽出条件では、フィールドのデータ型に応じて値を囲む記号が異なる(文字列ならシングルクォーテーション、日付型なら #、数値ならそのまま等)。

注意点 / 推奨事項

  • 条件を指定しないと意図しないレコードが返る可能性あり。
  • 多くのデータを対象にすると処理が遅くなる可能性があるため、パフォーマンスを考慮。
  • 場合によっては SQL やクエリの別の方法を使った方が効率的なこともある。

こちらの記事では、Accessで使うことができる主な関数を一覧形式で解説しています。

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