【Access】DLookup関数の使い方まとめ|基本テクニック解説

AccessではDLookup関数を使うことで、テーブルやクエリから条件に一致するデータを簡単に取得できます。

一方で「書き方が分からない」「条件指定でエラーになる」と悩む方も多いのではないでしょうか。

本記事ではDLookup関数の基本構文から実践的な使用例までを初心者の方にも分かりやすく解説します。

この記事で分かること
  • フォームの入力値からデータの取得方法
  • よくあるエラーの具体例と修正方法
  • 条件式を正しく組み立てるコツ
  • 実務で使える安全な書き方のポイント
目次

DLookup関数とは

DLookup関数とは、指定したテーブルまたはクエリから条件に一致するデータを1件取得できる関数です。

SQLを書かなくても簡単に値を取得できるため次のような場面でよく使われます。

  • フォームの自動入力
  • 帳票のデータ参照
  • VBA処理内での値取得
  • 入力補助や初期値設定

こんなときに便利

  • 特定条件の値を1件だけ取得したい
  • フォーム入力を自動補完したい
  • マスタ参照を簡単に行いたい

DLookup関数の基本構文

基本構文

DLookup関数の基本構文は次の通りです。

DLookup("フィールド名", "テーブル名", "条件式")

各引数の意味

引数 説明
フィールド名 取得したい列名
テーブル名 参照するテーブルまたはクエリ名
条件式 取得条件(WHERE句に相当)

これらを組み合わせることで条件に一致する1件のデータを取得できます。

DLookup関数の基本的な使い方

数値条件の基本例

社員テーブルから「社員IDが1」の「名前」を取得してみます。

DLookup("名前", "T社員", "社員ID = 1")

文字列条件の書き方

文字列を条件に指定する場合は、シングルクォート(’)で囲む必要があります。

DLookup("電話番号", "T社員", "社員名 = '山田太郎'")

社員名が「山田太郎」の電話番号を取得しています。

フォームの値を条件にする場合

フォームの値を条件に指定する場合は&を使って文字列を連結します。

DLookup("住所", "T社員", "社員ID = " & Me.社員ID)

フォームに入力された社員IDをもとに、該当する住所を取得しています。

フォームの値が文字列の場合

フォームの値が文字列の場合も、シングルクォートで囲む必要があります。

DLookup("住所", "T社員", "社員名 = '" & Me.社員名 & "'")

社員名がフォームの値と一致するレコードから住所を取得しています。

日付条件の書き方

日付を条件に指定する場合は#で囲む必要があります。

DLookup("売上", "T売上", "売上日 = #" & Format(Me.売上日, "yyyy/mm/dd") & "#")

フォームで指定した売上日に一致する売上金額を取得しています。

DLookup関数の実践的な使用例

フォームの自動入力

社員IDを入力すると、自動で社員名を表示させる例です。

Me.社員名 = DLookup("名前", "T社員", "社員ID = " & Me.社員ID)

入力補助として非常によく使われるパターンです。

マスタからデータの参照

入力した顧客IDをもとに顧客情報を表示する例です。

Private Sub cmd_検索_Click()

    Dim where_SQL As String
    
    ' 抽出条件
    where_SQL = "顧客ID = " & Me.txt顧客ID
    
    ' 各項目を取得して表示
    Me.txt顧客名 = DLookup("顧客名", "T顧客マスタ", where_SQL)
    Me.txt住所 = DLookup("住所", "T顧客マスタ", where_SQL)
    Me.txt担当者 = DLookup("担当者", "T顧客マスタ", where_SQL)
    Me.txtメールアドレス = DLookup("メールアドレス", "T顧客マスタ", where_SQL)

End Sub

条件に一致する顧客情報を必要な分取得できます。

DLookup関数で起きやすいエラー

型が一致しません

「型が一致しません」というエラーは、フィールドのデータ型と条件の書き方が合っていない場合に発生します。

例えば、数値型のフィールドに対してシングルクォート(’)を付けてしまうとエラーになります。

NGな例

' 誤り(数値型なのにシングルクォートを付けている)
DLookup("名前", "T社員", "社員ID = '1'")

正しい例

' 正しい書き方(数値型)
DLookup("名前", "T社員", "社員ID = 1")

まずはテーブル設計画面で、対象フィールドのデータ型を確認することが重要です。

構文エラー(クエリ式)

「構文エラー(クエリ式)」は、条件式の書き方が間違っている場合に発生します。

特に多いのは、文字列のシングルクォートや日付の#の付け忘れです。

NGな例

' 誤り(文字列なのにクォートなし)
DLookup("電話番号", "T社員", "社員名 = 山田太郎")

正しい例

' 正しい書き方(文字列はシングルクォートで囲む)
DLookup("電話番号", "T社員", "社員名 = '山田太郎'")

日付の場合は#で囲む必要があります。

DLookup("売上", "T売上", "売上日 = #2024/01/01#")

エラーが出た場合は、まず「条件式の文字列が最終的にどう組み立てられているか」を確認しましょう。

一致するレコードがありません

条件に一致するデータが存在しない場合、DLookup関数はNullを返します。

そのまま計算や代入を行うと、実行時エラーの原因になることがあります。

' Null対策
Me.txt名前 = Nz(DLookup("名前", "T社員", "社員ID = " & Me.社員ID), "")

Nz関数を使用することで、Nullを空文字や0に置き換えることができます。

特にフォームへの代入時は、必ずNull対策を行うことをおすすめします。

まとめ

本記事では、AccessにおけるDLookup関数の使い方を基本から実践例まで解説しました。

DLookup関数を使いこなせるようになると、Access開発の効率が大きく向上します。

ぜひ日々の業務で活用してみてください。

コメント

コメントする

コメントは日本語で入力してください。(スパム対策)

CAPTCHA

目次