[Access 2016/2013/2010/2007]
本記事では、図1のような[T_成績]テーブルで、[得点]フィールドの大きい順に順位を振る方法を紹介します。さらに、後半では数値の小さい順に順位を振る方法も解説します。
手順ダイジェスト
順位: DCount("得点","T_成績","得点>" & [得点])+1
手順解説…DCount関数を使用して降順の順位を求める
順位を求めるには、DCount関数(構文1)を利用します。DCount関数は、指定したフィールドのデータ数を求める関数です。
構文1 指定したフィールドのデータの個数を求める
DCount(フィールド, テーブル, 条件)
大きい順(降順)の順位を求めるには、DCount関数を使用して自分の得点より大きい得点がいくつあるかを数え、それに「1」を足します。各レコードの順位計算の考え方を整理してみましょう。
得点 | 順位 | 考え方 |
---|---|---|
80 | 2 | ←「80」より大きい得点は「100」…1個+1=2位 |
100 | 1 | ←「100」より大きい得点はない…0個+1=1位 |
70 | 3 | ←「70」より大きい得点は「80」「100」…2個+1=3位 |
50 | 5 | ←「50」より大きい得点は「80」「100」「70」「70」…4個+1=5位 |
70 | 3 | ←「70」より大きい得点は「80」「100」…2個+1=3位 |
例えば、1行目の「80」点の順位を求めるには、
DCount("得点","T_成績","得点>80")+1
と記述して、[T_成績]テーブルの[得点]フィールドから「80」より大きい得点データの数「1」を求め、それに「1」を足して「2」位という結果になります。同様に、各レコードの関数式は下表のようになります。
得点 | 順位 | 関数式 |
---|---|---|
80 | 2 | ← DCount("得点","T_成績","得点>80")+1 |
100 | 1 | ← DCount("得点","T_成績","得点>100")+1 |
70 | 3 | ← DCount("得点","T_成績","得点>70")+1 |
50 | 5 | ← DCount("得点","T_成績","得点>50")+1 |
70 | 3 | ← DCount("得点","T_成績","得点>70")+1 |
実際に式を立てるときには、上表の関数式を1つの共通の式にまとめる必要があります。「80」「100」「70」「50」「70」の部分は各レコードの[得点]フィールドの値なので、「[得点]」と表現できます。ただし、
× 順位: DCount("得点","T_成績","得点>[得点]")+1
と書くのはNG。ダブルクォーテーション「"」と「"」の中に「[得点]」を入れてしまうと、「[得点]」が文字列と認識されてしまいます。「[得点]」をフィールドとして正しく機能させるには、「"得点>"」という文字列とフィールド「[得点]」を「&」演算子で連結します。
式1 [T_成績]テーブルの[得点]フィールドの降順の順位を求める
順位: DCount("得点","T_成績","得点>" & [得点])+1
この式をクエリの[フィールド]欄に入力して(図2)、実行すると順位が表示されます(図3)。「70点」の2人には同じ「3位」が割り振られ、次の人は一つ飛ばした「5位」となります。
ヒント…昇順の順位を求めるには?
徒競走のタイムやゴルフのスコアなど、数値の小さい順(昇順)に順位を振りたい場合も考え方は同じです。DCount関数を使用して自分のタイムより小さいタイムがいくつあるかを数え、それに「1」を足します。例えば、[T_50m走]テーブルで[タイム]フィールドの小さい順に順位を付けたいときは、式2のように式を立てます(図4、図5)。