Microsoft Access 掲示板

DCount関数について教えてください!

2 コメント
views

 DCount関数について教えてください!

ゲームの集計表があります。

テーブルには

{順位]、[氏名]、[1ラウンド得点]、[2ラウンド得点]、[総得点]、[順位決定戦] としています。

[総得点]=[1ラウンド得点]+[2ラウンド得点]で計算させています。

テーブル → クリエ → フォーム と作成しました

順位を自動で計算させるためクエリに

順位: DCount("総得点","氏名クエリ","総得点>" & [総得点])+1

としました

パターン①(同得点がないので問題ありません)

[順位] [氏名] [1ラウンド得点] [2ラウンド得点]  [総得点]

1   Aさん     10        8                   18
2   Bさん     9        8                 17      
3   Cさん     8        5                   13
4   Dさん     7        2                    9
5   Eさん     6        1                    7

パターン②(Bさんと、Cさん同得点なので順位決定戦を行います

[順位] [氏名] [1ラウンド得点] [2ラウンド得点]  [総得点]  [順位決定戦]

1   Aさん     10        8                   18
2   Bさん     9        8                  17     2  
2   Cさん     8        9                  17     8 
4   Dさん     7        2                    9
5   Eさん     6        1                    7

順位決定戦の結果、Bさんが3位、Cさんが2位となります。
自動で順位をふらせる方法はないでしょうか?
あれば教えていただきたいです。
宜しくお願いします。

下記のように順位に自動でしたいです

[順位] [氏名] [1ラウンド得点] [2ラウンド得点]  [総得点]  [順位決定戦]

1   Aさん     10        8                   18
2   Cさん     8        9                  17     8  
3   Bさん     9        8                  17     2 
4   Dさん     7        2                    9
5   Eさん     6        1                    7

ヒロ
作成: 2025/11/07 (金) 22:33:48
通報 ...
1

順位: DCount("総得点","氏名クエリ","総得点>" & [総得点])+1

 
同着の順位付けは以下のように記述します

順位: DCount("*", "氏名クエリ"
            , "総得点 > " & 総得点 
                          & " OR ( 総得点 = " & 総得点 
                          & "        AND " 
                          & "      Nz(順位決定戦, 0) > " & Nz(順位決定戦, 0) 
                          & " )"
      ) + 1

 
ただし、DCount関数を使った順位付けは 重たい処理になりますから
クエリの表示速度に難があるようでしたら

hatenaさんが公開されている汎用関数 SetSequenceNumber

グループ毎連番を自動入力する関数
クエリで連番を表示する場合、DCount関数やサブクエリを利用する方法はあちこちで紹介されています。 しかし、この方法は自分より前のレコード件数をカウントするというロジックなのでレコード件数が多くなると幾何級数的に重くなります。また、グループ毎に連番を振るという仕様になると、条件式も複雑になってきます。 クエリは使わずにテーブルに連番フィールドを持たせて、そこに VBA で連番を書きこむようにすると高速...
fc2

を、ご自身のデータベースにインポートしておき、
以下のように呼び出し用のコードを記述して、適当なタイミングで実行するほうがいいでしょう
 

Sub sample()
    Rem // 関数の第一引数と第二引数は環境に合わせて変更して下さい
    Call SetSequenceNumber( _
             "順位を書き込むフィールド名", _
             "実際のテーブル名", , _
             "総得点 DESC, 順位決定戦 DESC" _
    )
End Sub
2
ヒロ 2025/11/09 (日) 18:28:13 c1459@a6874

mayu  さん

ありがとうございました。
クエリの方で動作確認させていただきました!