PR

Access VBA逆引き集|DLookup関数を使いこなしてマスタ参照を効率化する実践テクニックとCopilot活用術

VBA

Access VBAを開発していると、

  • 顧客コードから顧客名を取得したい
  • 商品コードから単価を取得したい
  • 設備番号から設備名を取得したい
  • レコードが存在するか確認したい
  • DAOを書くほどではない簡単な検索をしたい

という場面が頻繁に発生します。

結論から言うと、1件だけデータを取得したい場合はDLookup関数が非常に便利です。

DAOのRecordsetを使わなくても、

DLookup

だけで簡単にデータを取得できます。

実際の業務システムでは、

顧客管理

商品管理

マスタ参照

入力チェック

設備管理

などでよく利用されています。


スポンサーリンク

DLookupとは

DLookupは、

テーブル

↓

条件指定

↓

1項目取得

を行う関数です。


基本構文

DLookup(取得項目, テーブル名, 条件)


サンプル

DLookup("顧客名", "T_CUSTOMER", "顧客コード='C001'")

結果

東京商事

などが取得できます。


なぜDLookupが便利なのか

DAOの場合です。

Set rs = CurrentDb.OpenRecordset(strSQL)

さらに、

EOF確認

値取得

Close

が必要です。


DLookupなら、

strName = DLookup(...)

だけです。


メリット

簡単

記述量が少ない

初心者向き

です。


逆引き① 顧客名を取得したい

最も利用されます。

Dim strName As String

strName = Nz(DLookup("顧客名", "T_CUSTOMER", "顧客コード='C001'"), "")

結果

顧客名取得

できます。


逆引き② 商品単価を取得したい

商品管理です。

Dim lngPrice As Long

lngPrice = Nz(DLookup("単価", "T_PRODUCT", "商品コード='P001'"), 0)

結果

単価取得


逆引き③ レコード存在確認したい

入力チェックです。

If Not IsNull(DLookup("顧客コード", "T_CUSTOMER", "顧客コード='C001'")) Then

    MsgBox "存在"

End If

効果

重複登録防止


逆引き④ 設備名を取得したい

設備管理システムです。

strMachine = Nz(DLookup("設備名称", "T_MACHINE", "設備番号='EQ001'"), "")

効果

設備情報表示


逆引き⑤ フォームの値から検索したい

実務でよく利用します。

Me!顧客名 = Nz(DLookup("顧客名", "T_CUSTOMER", "顧客コード='" & Me!顧客コード & "'"), "")

効果

自動入力


Null対策は必須

DLookup最大の注意点です。


危険な例

strName = DLookup(...)

問題

対象データがなければ

Null

になります。


安全な例

strName = Nz(DLookup(...), "")

非常に重要です。


実務活用例① 顧客管理システム

顧客コード入力時です。

Private Sub 顧客コード_AfterUpdate()

    Me!顧客名 = _
    Nz(DLookup("顧客名", "T_CUSTOMER", "顧客コード='" & Me!顧客コード & "'"), "")

End Sub

効果

自動表示


実務活用例② 商品管理システム

単価取得です。

Me!単価 = _

Nz(DLookup("単価", "T_PRODUCT", "商品コード='" & Me!商品コード & "'"), 0)

効果

入力効率向上


実務活用例③ 設備管理システム

設備検索です。

Me!設備名称 = _
Nz(DLookup("設備名称", "T_MACHINE", "設備番号='" & Me!設備番号 & "'"), "")

効果

入力ミス削減


実務活用例④ ログ管理システム

ユーザー名取得です。

strUserName = _
Nz(DLookup("氏名", "T_USER", "社員番号='" & strUserID & "'"), "")

効果

表示情報補完


実務活用例⑤ 承認システム

承認者取得です。

strApprover = _
Nz(DLookup("承認者", "T_APPROVAL", "部門='" & strSection & "'"), "")

効果

ワークフロー自動化


DLookupとDAOの使い分け

初心者が迷うポイントです。


DLookup

向いている用途

1件取得

簡易検索

フォーム連携


DAO

向いている用途

複数件取得

大量データ処理

ループ処理


判断基準

1件 → DLookup

複数件 → DAO

です。


DCountとの違い

似た関数です。


DLookup

DLookup


取得

値


DCount

DCount


取得

件数


用途が異なります。


ベテラン開発者の定番コード

入力補助です。

Private Sub 商品コード_AfterUpdate()

    Me!商品名 = _
    Nz(DLookup("商品名", "T_PRODUCT", "商品コード='" & Me!商品コード & "'"), "")

End Sub

実務で非常によく利用します。


Copilot活用術① DLookupコード生成

Copilotへの依頼例です。

Access VBAです。

商品コードから商品名を取得する

DLookupコードを

作成してください。


Copilot活用術② Null対策追加

DLookup利用コードです。

Nz関数を追加して

安全なコードへ

改善してください。


Copilot活用術③ DAOとの比較

このDLookup処理は

DAOへ変更した方が良いですか?

レビューしてください。


DLookup利用時の注意点

Null対策必須

Nz(…)

を利用します。


繰り返し実行に注意

大量ループ内で実行すると遅くなります。


複数件取得は不可

取得できるのは

1件

です。


インデックス設定推奨

検索対象項目にはインデックスを設定しましょう。


DLookupが向いている処理

特に活躍するのは次の用途です。

  • 顧客名取得
  • 商品名取得
  • 単価取得
  • 設備名称取得
  • 利用者名取得
  • 入力補助
  • 存在確認

開発現場での利用頻度

順位用途
1位マスタ参照
2位顧客名取得
3位商品名取得
4位入力補助
5位存在確認

Accessフォーム開発では非常によく利用されます。


まとめ

DLookup関数はAccess VBAで最も手軽にデータを参照できる関数です。

特に、

  • 顧客管理
  • 商品管理
  • 設備管理
  • 入力補助
  • マスタ参照

などで大きな効果を発揮します。

まずは次のコードを覚えましょう。

Nz(DLookup("項目名", "テーブル名", "条件"), "")

これだけで実務でよくあるマスタ参照処理の多くに対応できます。

Copilotを活用すれば、

  • DLookupコード生成
  • Null対策追加
  • DAOへの改善判断

も効率的に進められます。

Access VBA開発者なら必ず使う関数の一つなので、ぜひ習得しておきましょう。

コメント

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