Access。ExcelのVLOOKUP関数引数。検索方法TRUEのような近似値を検索するには
<Access:VLOOKUP関数もどきで近似値>
ExcelのVLOOKUP関数で引数の検索方法を『TRUE』にすることで、近似値を検索することができます。一例として、得点が198点ならば、判定表からどのランクに該当するのかを抽出するというケースで使うことができますが、これと同じようなことをAccessで行うとしたら、どうしたらいいのでしょうか?
【AccessにはVLOOKUP関数はない】
Accessには、VLOOKUP関数というのはありませんが、「DLookup関数」というのがあります。そして、意外と簡単に、近似値を抽出することができます。
用意するものがいくつかありますので、確認します。
ランクのテーブルを用意します。
今回は、『Tランク一覧』という名前のテーブルです。
合計フィールドには、ランクに該当する数値が入力されています。
最小フィールドには、ランクの最低値を入力しておきます。
合計フィールドと同じ数値です。
最大フィールドには、ランクの最大値を入力しておきます。
成績表などのテーブル。またはクエリを用意します。
今回は、『Qテスト結果合計』というクエリを使います。
なぜクエリなのかというと、合計点フィールドは演算フィールドにしてあるからです。
合計点だけのテーブルならば、テーブルでOKです。
【クエリを作る】
用意した2つのオブジェクトを使い、クエリを作っていきます。オブジェクト間を、合計点と合計のそれぞれのフィールドを使ってリレーションを設定します。
通常リレーションを設定するだけで、ExcelのVLOOKUP関数で引数の検索方法を『FALSE』にした完全一致と同じようになります。
ただ、完全一致だと、合計フィールドにない値は表示されませんので、それでは、困ります。
そこで、結合プロパティを使って、設定を変更します。
Qテスト結果合計を全部表示させないといけませんので、「2」を選択してOKボタンをクリックします。
【ランク判定をするための数値を算出】
合計点から直接ランクを見つけることはできませんので、ランク判断式という演算フィールドを用意します。ランク判断式: DMax("[最小]","Tランク一覧","[最小]<=" & [合計点])
実行して確認してみましょう。
DMax関数を使うことで、近似値を算出することができたわけです。
DMax関数は、テーブルやクエリに含まれるフィールドで、指定した列に記録されている数値のうち最大のものを算出することができます。
ExcelのMAX関数とは違い、見慣れないので、書式も書いておきます。
DMax(フィールド名,テーブル名orクエリ名[,条件])
【ランクを表示させる】
近似値に該当するランクを抽出するにはどうしたらいいのでしょうか?ここで登場するのが、『DLookup関数』です。
新たに、DLookup関数を使った演算フィールドを作ります。
ランキング: DLookUp("[ランク]","Tランク一覧","[最小]=" & [ランク判断式])
では、実行して確認してみましょう。
このように、ランクを表示させることができました。
DLookup関数の書式は、
DLookup(フィールド名,テーブル名orクエリ名[,条件])
で、先程のDMAX関数と同じ引数をもっています。
ExcelのVLOOKUP関数の検索方法をTRUEにした場合と同じ、近似値をつかった抽出方法もAccessで出来ますが、Excelにエクスポートできるなら、ExcelのVLOOKUP関数で処理するほうがわかりやすいような気もします。