- ベストアンサー
ACCESSで前後の記録の増減を表示したいのですが・・・
- ACCESSを使用して、前後の記録の増減を表示したいです。具体的には、ランニングの記録を集計しています。記録テーブルには、回数、1km走タイム、3km走タイム、5km走タイムの列があります。
- また、タイム差クエリもあります。このクエリは、回数ごとに1km、3km、5kmのタイム差を計算しています。このタイム差を使用して、前の記録に対しての数字の増減を表示したいです。
- 具体的には、前のレコードに対して1km、3km、5kmの増減を表示したいです。例えば、2回目のレコードに対する1kmの増減は+10、3kmの増減は-11、5kmの増減は-33などです。どのようにすれば、これを実現できるでしょうか?
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
VBAを使用してよいならば、ADOなどで接続してデータを1件ずつ読み込み、前回のデータと比べそれを該当フィールドに書き込めばよいわけですけれど。 クエリだけで考えると まずクエリを一つ作ります。 項目は [回数]のかわりに [前回回数]:[回数]-1 とでもしておいてください。 このクエリを実行させると、 前回回数 1km走タイム 3km走タイム 5km走タイム --------------------------------------------------- 0 345 855 1411 1 355 844 1378 2 350 881 1380 となるはずです。 あとは、もう一つクエリを作成し、 最初のテーブルとこのクエリの[回数]と[前回回数]をリレーションシップで結び、 1km:[クエリ名]![1km走タイム]-[テーブル名]![1km走タイム] 3km:[クエリ名]![3km走タイム]-[テーブル名]![3km走タイム] ・・・・・・・・・ としていけば、できると思います。
その他の回答 (2)
No2です。 変数の誤りがありました。 誤 Lastdata1 = Rst!1km走タイム Lastdata2 = Rst!3km走タイム Lastdata3 = Rst!5km走タイム 正(loop前とloop内に2箇所あります。) Lastdata1 = Rst!1km走タイム Lastdata3 = Rst!3km走タイム Lastdata5 = Rst!5km走タイム VBAですので、宣言をしなくても動きますが、とりあえずこのようなつもりでした。 すみませんでした。
お礼
VBAだとこのようになるのですね。 クエリしか作ったことないので このような文ははじめて見ます。 複数回に渡って回答していただき ありがとうございました。
VBAを使った際は、テーブルは一つだけでよいですが、フィールドに [1km],[3km],[5km] (前回比を入れる場所を用意しておいてください。) あとはどこでも良いですが、フォーム上にボタンでも作ってそのクリックイベントに Dim Conn As ADODB.Connection Dim Rst As ADODB.Recordset Dim Lastdata1 as Integer Dim Lastdata3 as Integer Dim Lastdata5 as Integer Set Conn = CurrentProject.Connection Set Rst = New ADODB.Recordset Rst.Open "テーブル名", Conn, adOpenkeyset, adLockOptimistic Rst.movefirst Lastdata1 = Rst!1km走タイム Lastdata2 = Rst!3km走タイム Lastdata3 = Rst!5km走タイム Rst.movenext do while not Rst.eof Rst!1km = Rst!1km走タイム-Lastdata1 Rst!1km = Rst!3km走タイム-Lastdata3 Rst!1km = Rst!5km走タイム-Lastdata5 Lastdata1 = Rst!1km走タイム Lastdata2 = Rst!3km走タイム Lastdata3 = Rst!5km走タイム Rst.update Rst.movenext Loop Rst.Close: Set Rst = Nothing Conn.Close: Set Conn = Nothing のように書いておいて実行させればデータが入ってくると思います。 (実際にテストはしていませんので、動かなかったらごめんなさい。)
お礼
教えていただいたクエリを2つ作って 集計したら希望通りの結果が出ました。 ありがとうございます。 もしよろしければ後学のため VBAを使って作成する場合の方法を 教えていただけないでしょうか?