ACCESSA-VBA | DLookupでテーブルから特定の値を取得する方法
ACCESSのDLookup関数でテーブルから特定の値を取得する方法
1.DLookup関数でテーブルやクエリ内を検索して値を取得する方法
概要
DLookup関数は、ACCESS固有の関数で、テーブルやクエリーからデータを検索して取得する為の関数。ExcelにもLookup関数があるが、使い方が違うだけで機能自体はほぼ同じで、検索対象から検索文字にヒットした検索結果を取得出来る。
ExcelのLookupと違うところは、検索条件がもう少し細かく指定出来る。
メリット・デメリット
メリット
- SQLを書かなくても簡単にデータが取得できる。
- テーブルからだけじゃなく、もう少し条件を絞ったクエリーからもデータが取得できる。
- 完全一致だけじゃなく、あいまい検索も可能
デメリット
- DLookupは、ACCESS専用の関数である為、EXCELのVBAでもコードを再利用したい場合は、EXCELのマクロでも利用できるように書き直す必要がある。
使い方
Private Sub btnSearch_Click()
Dim CommodityCode As String
Dim CommodityName As String
CommodityCode = DLookup("[商品コード]", "[商品マスター]", "[商品名] LIKE '*" & txtCommodity.Value & "*'")-1
CommodityName = DLookup("[商品名]", "[商品マスター]", "[商品コード] = '" & CommodityCode & "'")-2
Dim ITM As ListItem
Set ITM = lvView.ListItems.Add(, , CommodityCode)
ITM.SubItems(1) = CommodityName
End Sub
Dim CommodityCode As String
Dim CommodityName As String
CommodityCode = DLookup("[商品コード]", "[商品マスター]", "[商品名] LIKE '*" & txtCommodity.Value & "*'")-1
CommodityName = DLookup("[商品名]", "[商品マスター]", "[商品コード] = '" & CommodityCode & "'")-2
Dim ITM As ListItem
Set ITM = lvView.ListItems.Add(, , CommodityCode)
ITM.SubItems(1) = CommodityName
End Sub
-1 -> DLookup関数で、[商品マスター]テーブルから、[商品名]をLIKE(ライク)であいまい検索し、[商品コード]を取得している。
-2 -> DLookup関数で、-1で取得した商品コードを使って、[商品マスター]テーブルから、[商品コード]を完全一致で検索し、正式な[商品名]を取得している。