ここから質問投稿すると、最大10000ポイント当たる!!!! >>

OS:Win2000、Access2000

初めて投稿させていただきます。
かなり頭を悩ませているのですが

製品名|工程名|処理日付   |判定|
123456|ABCDEF|03/05/13 9:00|OK |
123456|ABCDEF|03/05/13 8:35|NG |
345678|CDEFGH|03/05/13 9:30|NG |
345678|CDEFGH|03/05/13 8:20|NG |
56789A|EFGHIJ|03/05/13 6:20|OK |

このようなテーブルデータから製品名毎に前回の判定と今回のデータを比較して
NG→OK,OK→OK,OKかNG→NG
という3つ分類に分けて集計したいと考えておりますがどうやって判断したら良いものか頭を抱えております。

製品名|工程名|処理日付   |判定|判定2|
123456|ABCDEF|03/05/13 8:35|NG |OK |
のようにテーブルを結合できれば何とか判断付くような気がしますが、そのようにする方法も分かりません。

どのような方法でも構いませんのでこの集計を実現できる方法を助言して下さい。
同じ製品名でのレコード数は2か1です。 
1レコードしかない場合は前回はNGとみなします。

申し訳ありませんがよろしくお願いいたします。

このQ&Aに関連する最新のQ&A

A 回答 (1件)

こんにちは。



クエリーで何とかしようと思ったのですが、うまく出来ないのでモジュール化しました。
これで何とかなると思います。

----------------------------------------------------------------------
テーブル構成
 元テーブル
  テーブル名:製品工程テーブル
   項目名
    製品名 :テキスト型
    工程名 :テキスト型
    処理日付:日付/時刻型
    判定  :テキスト型
 集約テーブル
  テーブル名:製品工程判テーブル
   項目名
    製品名 :テキスト型
    工程名 :テキスト型
    処理日付:日付/時刻型
    前回判定:テキスト型
    今回判定:テキスト型
----------------------------------------------------------------------
モジュール 
----------------------------------------------------------------------
Public Function Make_Shukei()
'
' 変数定義
Dim DBN As Database
Dim SNAP As Recordset
Dim DYNA As Recordset
Dim SQLSTR As String
Dim WK_SEIHIN As String
Dim WK_CNT As Integer
'
' データベース定義
Set DBN = DBEngine.Workspaces(0).Databases(0)
'
' 格納先レコード削除
DoCmd.SetWarnings False
DoCmd.Echo False
'
DoCmd.RunSQL "DELETE FROM 製品工程判定テーブル"
'
' 初期値設定
WK_SEIHIN = "**********"
WK_CNT = 0
'
' 抽出用SQL作成
SQLSTR = ""
SQLSTR = SQLSTR & "SELECT 製品名,工程名,処理日付,判定 FROM 製品工程テーブル "
SQLSTR = SQLSTR & " ORDER BY 製品名, 処理日付;"
'
' レコードセット定義
Set SNAP = DBN.OpenRecordset(SQLSTR, DB_OPEN_SNAPSHOT)
Set DYNA = DBN.OpenRecordset("製品工程判定テーブル", DB_OPEN_DYNASET)
'
If SNAP.BOF = False Then
SNAP.MoveFirst
Do Until SNAP.EOF
'
If WK_SEIHIN <> SNAP("製品名") Then
If WK_SEIHIN <> "**********" Then
If WK_CNT = 1 Then
DYNA("今回判定") = DYNA("前回判定")
DYNA("前回判定") = "NG"
End If
DYNA.Update
End If
'
DYNA.AddNew
DYNA("製品名") = SNAP("製品名")
DYNA("工程名") = SNAP("工程名")
DYNA("処理日付") = SNAP("処理日付")
DYNA("前回判定") = SNAP("判定")
WK_SEIHIN = SNAP("製品名")
WK_CNT = 1
Else
DYNA("今回判定") = SNAP("判定")
WK_CNT = 2
End If
'
SNAP.MoveNext
Loop
End If
'
If WK_SEIHIN <> "**********" Then
If WK_CNT = 1 Then
DYNA("今回判定") = DYNA("前回判定")
DYNA("前回判定") = "NG"
End If
DYNA.Update
End If
'
SNAP.Close
DYNA.Close
'
DoCmd.SetWarnings True
DoCmd.Echo True
'
End Function
----------------------------------------------------------------------
[ツール]-[参照設定]で以下のライブラリのみにチェックを入れて下さい。
■Visual Basic for Application
■Microsoft Access 9.0 Object Library
■OLE Automation
■Microsoft DAO 3.6 Object Library
■Microsoft Visual Basic for Application Extensibulity 5.3
----------------------------------------------------------------------

何か不明な点があれば補足してください。
ではでは・・・
    • good
    • 0
この回答へのお礼

paz777様ありがとうございました。

モジュールまで作成していただきましてありがとうございました。
VBAは全く使った事がなく分からないながらも何とか動作させる事が出来ました。

本当にありがとうございました。
なんとお礼を言って良いものか本当にありがとうございました。

お礼日時:2003/05/15 13:31

このQ&Aに関連する人気のQ&A

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

関連するカテゴリからQ&Aを探す


人気Q&Aランキング