dポイントプレゼントキャンペーン実施中!

お世話になります。

Accessで順位付けを行いたいのです。
サブクエリでやってみたのですがレコード数多く遅くなってしまうのでVBAで行いたいのですが、
VBAが初心者でうまく出来ません。

『コード』ごとで『半期』の降順に以下のように作成したいのです。

テーブル名 『ランク』

コード(テキスト型)     獲得数(数値型) 期ごと(テキスト型)    順位
A123             55   2010上期         1
A123            0   2010下期   2
A123     269    2009上期   3
A123         1   2009下期     4
A123        789    2008上期     5
A123        101   2008下期     6
------------------------------------------------------------
C456      10    2010上期       1
C456       0    2010下期       2
C456      776    2009上期       3
C456       0    2009下期       4
C456       0    2008上期       5
C456       0    2008下期       6

どうぞよろしくお願いします。

A 回答 (2件)

No.1 の回答のコードにいつくか間違いがありましたので、下記に訂正します。



Dim rs As DAO.Recordset
Dim cd As String, i As Integer

Set rs = CurrentDb.OpenRecordset("SELECT * FROM ランク ORDER BY コード, 期ごと DESC")

Do Until rs.EOF

  If cd = rs!コード Then
    i = i + 1
  Else
    i = 1
    cd = rs!コード
  End If
  rs.Edit
  rs!順位 = i
  rs.Update
  rs.MoveNext
Loop

rs.Close
Set rs = Nothing
    • good
    • 1
この回答へのお礼

ごれんらくが遅くなりました。

見事に出来ました、ありがとうございます。訂正までしていただいてほんとうに助かりました。

お礼日時:2011/07/21 21:44

DAOを使用する例


DAOに参照設定が必須

数値型の「順位」フィールドを追加

Dim rs As DAO.Recordset
Dim cd As String, i As Integer

Set rs = CurrentDB.OpenRecordset("SELECT * FROM ランク ORDER BY コード, Left(期ごと,4), Mid(期ごと,5)='上期'"

Do rs.EOF

  If cd = rs!コード Then
    i = i + 1
  Else
    i = 1
    cd = rs!コード
  End If
  rs.Edit
  rs!順位 = 1
  rs.Update
  rs.MoveNext
Loop

rs.Close
Set rs = Nothing



テーブルデータに変更があったときに上記のコードを実行します。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!