AccessでVLOOKUP関数・近似値検索

DLookup関数で行を特定する

テキストボックス「txtランク」へ各スコアの「ランク」を表示させる数式をセットします。

テキストボックス「txtランク行の特定」に表示されている値と「Q_ランク対応表・最小スコア」を比較させ、一致する行を検索・特定します。
特定できたら、その行の「ランク」フィールドを表示させます。

このケースではDLookup関数を使ってみます。使い方はDMax関数と同じです。

=DLookup(表示フィールド,表示フィールドがあるテーブル・クエリ,限定条件)

という書式で捉えてください。限定条件に適合するレコードの中で最上部のレコードの結果を返します。

「txtランク」のコントロールソースには

=DLookUp("[ランク]","Q_ランク対応表","[最小スコア]=" & [txtランク行の特定])

を設定します。
テキストボックス「txtランク行の特定」と同じ「最小スコア」の行の「ランク」が返ります。

またテキストボックス「txtランク行の特定」を使わなくてもかまいません。
上記式の[txtランク行の特定]部を、「txtランク行の特定」に設定した式に変えても同様の結果が得られます。

=DLookUp("[ランク]","Q_ランク対応表","[最小スコア]=" & DMax("[最小スコア]","Q_ランク対応表","[最小スコア]<=" & [txtスコア]))

まとめ

まとめますと、

=DLookUp("表示フィールド","母体のテーブル・クエリ","検索フィールド=" & DMax("主キー","母体のテーブル・クエリ","検索フィールド <=" & [検索値とするテキストボックス]))

という計算式を設定することになります。立体的に記述します。

=DLookUp(
"表示フィールド",
"母体のテーブル・クエリ",
"検索フィールド=" & 
     DMax(
     "主キー",
     "母体のテーブル・クエリ","検索フィールド <=" & 
     [検索値とするテキストボックス])
)

考え方としては

  1. フォーム内のテキストボックスの値は対応表のどの行に属しているのかをDMax関数で検索・特定する。
  2. DLookup関数で、特定した行から目的のフィールドの値を返させる。

となります。

完成ファイルのダウンロード(zip→Accessファイル):vlookup_for_access

コメント