Microsoft Access 掲示板

データ間の差を一時的にデータ化

4 コメント
views
4 フォロー

お世話になっております。

Lotデータ
0601175
0602182
0603
0604180

このような、データに抜けのあるテーブル[T_データ]があります。
これらについて前回測定時との「差」というフィールドを持つ、
クエリまたはレコードセットを作成したいのですが、
考え方がわかりません。
最終目的は、この差を使った折れ線グラフ(Rs管理図)作成です。

Lotデータ
06011750(どうでもいい)
0602182 7 
0604180 -2

以下、自分で作ってみたけど、動きませんでした。(このコレクションには項目がありません)

Dim rs as DAO.Recordset
Dim Pdata as Integer '前回データ格納
strSQL = "SELECT [T_データ].Lot, [T_データ].データ, Null As [差] "
strSQL = strSQL + "(WHERE Not ([T_データ].データ) Is Null); "
Set rs1 = CurrentDb.OpenRecordset (strSQL, dbOpenDyanaset)
With rs
 .movefirst
 Pdata = .fields("データ")
 Do until .EOF
   .edit
   .fields ("差") = .Fields("データ") - Pdata
   Pdata = .Fields("データ")
   .Update
   rs.MoveNext
 Loop
End With
rs.close:set rs= Nothing
nokonoko
作成: 2023/06/13 (火) 15:08:59
通報 ...
1

Null As [差] というのは演算フィールドですね。演算フィールドを更新することはできません。
この式なら Null 固定です。

テーブルに[差]というフィールドを追加することが可能なら、.edit .Update で更新することができます。

テーブルにフィールドを追加することができないなら、DLookupなどの定義域集計関数を使うか、サブクエリを使った演算フィールドを設定することになります。

どちらでご希望でしょう。

また、データが空欄の場合は、差はどうなるのでしょうか。

最終目的は、この差を使った折れ線グラフ(Rs管理図)作成です。

折れ線グラフはどのように作成する予定でしょうか。
グラフコントロールを利用するのでしょうか。

直線コントロールを使って自前でグラフを描画するようにすれば、差フィールドはなくても、描画するときに計算してもいいでしょう。

2
nokonoko 2023/06/14 (水) 08:36:36 3e2e6@54883

テーブルに[差]というフィールドを追加することが可能なら、.edit .Update で更新することができます。

それが一番わかりやすいですね。テーブルに追加するのは永続的に捨てデータができるだけだと思って敬遠していましたが、たいしたデメリットではないので、それで対応しようと思います。

テーブルにフィールドを追加することができないなら、DLookupなどの定義域集計関数を使うか、サブクエリを使った演算フィールドを設定することになります。

今回はテーブルで対応すればいいのかなと思いますが、まだ方針が定まりません。最終的にはデータの差についての折れ線グラフ(それっぽい画像でもよい)描画が目的で、その手段が間違いであれば、根本的に考え直したいです。

また、データが空欄の場合は、差はどうなるのでしょうか。

0603のようなデータがある場合は、無視します。ロットを昇順にして並び替え、データがないものは無視し、あるものの中で直前のデータとの差を使います。

折れ線グラフはどのように作成する予定でしょうか。
グラフコントロールを利用するのでしょうか。

最終目標と現在のデータから考えて、思いついたのはグラフコントロールを使ってみる方法でしたが、それが最善であるかもわかっていません。

直線コントロールを使って自前でグラフを描画するようにすれば、差フィールドはなくても、描画するときに計算してもいいでしょう。

この考え方は全く知りませんでした。アクセスでグラフを作るのは大変だと認識しているので、この方法を検討してみたいと思います。

以上、初級者の舌足らずな説明で申し訳ございませんが、引き続きご指導のほどよろしくお願いします。

3

最終目標と現在のデータから考えて、思いついたのはグラフコントロールを使ってみる方法でしたが、それが最善であるかもわかっていません。

グラフコントロールを使うなら、ソースに[差]フィールドが必要になるので、テーブルにフィールドを追加するか、クエリの演算フィールドを作成することになります。
前レコードとの差を求めるような処理はクエリは苦手なので複雑になります。テーブルにフィールドを追加できるならそちらの方がシンプルです。質問のコードを少し手直しするだけでできます。

グラフをレポートに表示させるなら、VBAですべて描画する(Lineメソッド等を使う)という方法もあります。フォームなら、直線コントロールをVBAで配置することになります。
自分はグラフを使ったこともあるのですが、結構使い方が難しく、自分の思い通りの表示にならないので、ちょっと苦手ということもあり、こちらの方法を使うかもしれません。ただ、グラフの要素をすべてコードが書く必要があるので、かなり敷居は高いと思います。なれれば自分の思い通りのグラフを作成することができます。また、描画時にVBAで差を計算すればいいので、[差]フィールドは不要です。

365なら「モダングラフ」が使えるのでこれを検討するのもいいかもしれません。私は使ったことがないのですが、使いやすそうです。(下記リンク参照)

Access2019のモダングラフの挿入(フォームやレポートで簡単グラフ作成) | Access 2019 | 初心者のためのOffice講座

まずは、上記の情報から、自身でいいと思うものを選択して取り組んでみてください。

4
nokonoko 2023/06/14 (水) 10:59:14 3e2e6@54883

回答ありがとうございます。
テーブルに差フィールドを追加して、グラフ描画前にデータを随時更新する。
あらかじめ、クエリをオブジェクトとして作っておき、それをソースにモダングラフを作る。
こういう方針で、やってみたら少しずつ形になってきました。
今後も、なるべく用意されている機能で作っていこうと思います。

今回は、ご指導いただきありがとうございました。