AccessでVLOOKUP関数・近似値検索

DMax関数で行を特定する

「T_スコア記録表」をレコードソースとした表形式のフォームを作成しました。
フォーム名は「F_スコア-ランク」とします。

また便宜上「スコア」のテキストボックス名を「txtスコア」に変更しています。
さて「スコア」から「ランク(txtランク)」を割り出す前に各「スコア」は「Q_ランク対応表」のどの行に属するのかを調査します。

「495→450の行」「605→550の行」「350→350の行」…であることを「txtランク行の特定」で割り出します。

最初にDmax関数の使い方をざっくりと確認いたします。
「txtランク行の特定」のコントロールソースに以下を入力します。

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

すると「750」と表示されます。この関数の書式は

=DMax(最大値を調べたいフィールド,最大値を調べたいフィールドがあるテーブル・クエリ)

と捉えてください。それぞれ文字列形式で指定する必要があり、「”」で囲みます。
表示されているのは「Q_ランク対応表・最小スコア」の「最大値」です。

DMax関数へ情報・条件を追加します。
最初に「スコアID:1」のケース「txtスコア:495」は「Q_ランク対応表」のどの行に属しているかを調査させてみます。

「最小スコアが『495』以下の中での最大値」を調べる関数にするのです。
第3引数に「"[最小スコア]<=495"」を追加します。ここに条件を設定することで最大値を調べる方法を限定できるのです。

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

とします。495以下で最も大きい「最小スコア」は「450」となります。

今度は限定条件を「495 以下」ではなく、フォーム上の各レコードにある「txtスコア 以下」に変更します。
限定条件にフォーム上のテキストボックスを採用するには、それ以外の部分と切り離して指定します。そして「&」で結合させるのです。すなわち第3引数を

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

のように修正します。これで各スコアは「Q_ランク対応表」の中でどの行に属するのかが判明しました。

コメント