- ベストアンサー
ACCESSクエリー処理で
ACCESS2000でのクエリー処理において下記方法を教えてください。 テーブルA 商品A 開始日 終了日 商品A 開始日 終了日 商品B 開始日 終了日 ※商品単位に開始日や終了日が違うレコードが複数存在します。 上記テーブルをクエリーで下記イメージに処理できますでしょうか? 商品A 開始日 終了日 開始日 終了日 商品B 開始日 終了日
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
単純なクエリーでは無理。 基本的にSQLはカラムを読み込みます イメージで書いてあるようなカラム数の違うものは取り扱いできません 商品Bの2個目の開始日、終了日はNullでもよいからなければなりません それに複数レコードあるっていう事ですがカラムを自動発生させることはできませんし、 Accessはカラム数の制限がありそれ以上を取り扱うことができません (確か255個まで?) 一度ワークテーブルを作りそこにデータを書き込みSelectするのが現実的と思います。 WorkTblに 品名,開始日1,終了日1,開始日2,終了日2,・・・・,開始日99,終了日99 のカラムがあったとしてのワークテーブル作成サンプルVBAを載せて置きます。 実行チェックはしていませんので悪しからず。 Sub aaa() Dim iRs As Recordset Dim oRs As Recordset Dim Pos As Long Dim oHinNei As String Call CurrentDb.Execute("delete * from WorkTbl") Set iRs = CurrentDb.OpenRecordset("SELECT * FROM 商品TBL ORDER BY 商品名,開始日") If iRs.EOF Then iRs.Close Set iRs = Nothing Exit Sub End If Set oRs = CurrentDb.OpenRecordset("SELECT * from WorkTbl") While iRs.EOF = False If oHinNei <> iRs("品名") Then If oHinNei <> "" Then oRs.Update End If Pos = 0 oRs.AddNew oHinNei = iRs("品名") oRs("品名") = iRs("品名") End If Pos = Pos + 1 If Pos < 100 Then oRs("開始日" & CStr(Pos)) = iRs("開始日") oRs("終了日" & CStr(Pos)) = iRs("終了日") End If Wend oRs.Update iRs.Close oRs.Close Set iRs = Nothing Set oRs = Nothing End Sub
お礼
回答をいただき誠にありがとうございます。 VBAは超初心者レベルですので、おおよそは理解できるのですが 応用がききません。 Wortblの開始日~終了日を3つだけに修正(if Pos < 4 then) して処理してみたのですが、教えていただいた内容ではループ します。 おそらく"品名"のコントロールブレイク処理がうまくいっていな いのだと思いますが、どのように修正すればいいか教えていただ けますでしょうか?
補足
自己解決しました。 この方法が正しいのかはわかりませんが、Move.Nextで レコードを移動させることで解決したようです。