AccessではDLookUp関数を使う頻度が多いと思いますが、条件を設定する場合に複数で指定する必要がある機会もあります。
今回は、DLookUp関数で複数条件を設定する方法を紹介します。なお、DLookUp関数の基本的な使い方は以下の記事をご参照ください。
サンプルデータ
まずはサンプルデータを格納するためのサンプルテーブルとして「原材料」テーブルを作成します。そして、フィールド名とデータ型を次のようにします。
■「原材料」テーブルについて
フィールド名 | データ型 |
原材料コード | 短いテキスト |
原材料名 | 短いテキスト |
売上 | 数値型 |
売上日 | 日付/時刻型 |
■サンプルデータについて
原材料コード | 原材料名 | 売上 | 売上日 |
SA100 | 小麦粉 | 100 | 2020/5/22 |
SA100 | 小麦粉 | 105 | 2020/5/23 |
SB101 | 卵 | 86 | 2020/5/22 |
SB101 | 卵 | 90 | 2020/5/23 |
作成するクエリ
今回作成するクエリは、各レコードに対して前日の売上との比較ができるようにフィールドを追加して表示するものとします。
サンプルデータの場合、「2020/5/23」付の「小麦粉」と「卵」のレコードでそれぞれ前日の売上を表示させ、「2020/5/22」付のレコードは比較対象がないためNullとして結果が返されるイメージです。
それでは、クエリを作成していきましょう。「原材料」テーブルに加えて次の内容を【フィールド】項目に追加します。
前日売上: DLookUp(“売上”,”原材料”,”原材料名 = ‘” & [原材料名] & “‘ And 売上日 = #” & DateAdd(“d”,-1,[売上日]) & “#”)
早速、DLookUp関数を使ってみました。ここで注目する点は、DLookUp関数の「criteria」引数部分、すなわち、抽出する条件の記載方法です。今回の場合、前日の売上を抽出するためには「原材料」フィールドと「売上日」フィールドの両方が一致したレコードの「売上」を見に行く必要がありました。そこで、条件式としてAND条件を用いた抽出を行っています。
DLookUp関数における複数条件の設定
改めて、DLookUp関数の複数条件設定を見ていきましょう。
① 原材料フィールドの値が一致するものを抽出する。
このために「”原材料名 = ‘” & [原材料名] & “‘」と記載しています。特に、原材料名は短いテキスト型になるため、シングルクオーテーションで括ることを忘れないでください。
② 「AND」で条件をつなぐ。
DLookUp関数では、一意のレコードから対象フィールドの値を抽出する必要があるため、サンプルデータの場合は「原材料名」だけで抽出することができません。したがって、AND条件として別の追加条件を付与することとなります。
③ 売上日フィールドの値が一致するものを抽出する。
このために、AND条件の後ろに「売上日 = #” & DateAdd(“d”,-1,[売上日]) & “#”」と記載しています。特に、売上日は日付/時刻型のため、シャープで括る必要があります。また、前日=1日前のため、当該売上日フィールドから1日前の値を出力できるようにDateAdd関数を用いています。
DateAdd関数の使い方は以下の記事をご参照ください。
こうして、2条件で一致するレコードの「売上」フィールドの値を抽出するようにしました。なお、該当するレコードがない場合は、Nullが返されることになります。
今回は2条件での抽出としましたが、3条件でも4条件でもAND/ORを上手く組み合わせて一意のレコードにすることができれば、DLookUp関数を利用することができます。
設定したクエリを図1に示します。
抽出結果の確認
さて、ここまででクエリの設定をすることができました。それでは早速クエリによる結果を確認してみましょう。データシートビュー画面に切り替えてみてください。
すると図2に示すような結果が得られたと思います。
このようにして、DLookUp関数で複数条件により必要な値を抽出することができるようになりました。
まとめ
AccessではDLookUp関数を使う機会が多々ありますが、複数条件を設定することもできますので様々なニーズに適用してデータ処理を効率的に実施していただければと思います。
スポンサーリンク
コメント