• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:ACCESSで前後の記録の増減を表示したいのですが・・・)

ACCESSで前後の記録の増減を表示したいのですが・・・

このQ&Aのポイント
  • ACCESSを使用して、前後の記録の増減を表示したいです。具体的には、ランニングの記録を集計しています。記録テーブルには、回数、1km走タイム、3km走タイム、5km走タイムの列があります。
  • また、タイム差クエリもあります。このクエリは、回数ごとに1km、3km、5kmのタイム差を計算しています。このタイム差を使用して、前の記録に対しての数字の増減を表示したいです。
  • 具体的には、前のレコードに対して1km、3km、5kmの増減を表示したいです。例えば、2回目のレコードに対する1kmの増減は+10、3kmの増減は-11、5kmの増減は-33などです。どのようにすれば、これを実現できるでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
noname#60992
noname#60992
回答No.1

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走タイム] ・・・・・・・・・ としていけば、できると思います。 

waiem00554
質問者

お礼

教えていただいたクエリを2つ作って 集計したら希望通りの結果が出ました。 ありがとうございます。 もしよろしければ後学のため VBAを使って作成する場合の方法を 教えていただけないでしょうか?

その他の回答 (2)

noname#60992
noname#60992
回答No.3

No2です。 変数の誤りがありました。 誤 Lastdata1 = Rst!1km走タイム Lastdata2 = Rst!3km走タイム Lastdata3 = Rst!5km走タイム 正(loop前とloop内に2箇所あります。) Lastdata1 = Rst!1km走タイム Lastdata3 = Rst!3km走タイム Lastdata5 = Rst!5km走タイム VBAですので、宣言をしなくても動きますが、とりあえずこのようなつもりでした。 すみませんでした。

waiem00554
質問者

お礼

VBAだとこのようになるのですね。 クエリしか作ったことないので このような文ははじめて見ます。 複数回に渡って回答していただき ありがとうございました。

noname#60992
noname#60992
回答No.2

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 のように書いておいて実行させればデータが入ってくると思います。 (実際にテストはしていませんので、動かなかったらごめんなさい。)

関連するQ&A