- ベストアンサー
Accessのテーブルを展開する
Accessのテーブルを下の例の様に分離させることは出来ないでしょうか? VBA、クエリ等手法は問いませんのでヒントをいただければ幸いです。 (元のテーブル) 品物 個数 A 3 B 2 (分離後のテーブル) 品物 個数 A 1 A 1 A 1 B 1 B 1 以上、よろしくお願いいたします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
誰にでもできる簡単な方法です。 元テーブルの個数の最大数より多い連番のテーブルを作ります。 連番テーブルとしてフィールドは連番・R個数(クエリ時にエラーになるので元テーブルの個数と別名)にします。 連番には1~元テーブルの個数の最大数より多い数字まで入力しR個数は全て1にします。 例えば元テーブルの個数の最大個数が10なら 連番 R個数 1 1 2 1 3 1 4 1 5 1 6 1 7 1 8 1 9 1 10 1 11 1 のように連番テーブルを作ります。 元テーブルを元に選択クエリを作りテーブル追加で連番テーブルを追加します。リレーション等はいりません。 クエリのフィールドに連番テーブルの連番とR個数を追加します。連番の抽出条件に<=[個数]としてクエリを開けば元テーブルの個数分がR個数1で表示されます。 クエリの物品とR個数を使えばお望みになるはずです。 最大個数がそんなに大きくなければこれが簡単です。 試してみてください。
その他の回答 (2)
VBAで作成しました。 Private Sub コマンド0_Click() Dim db As DAO.Database Dim rsi As DAO.Recordset Dim rso As DAO.Recordset Dim i As Integer DoCmd.RunSQL "Delete From テーブルOut" Set db = CurrentDb Set rsi = db.OpenRecordset("テーブルIn") Set rso = db.OpenRecordset("テーブルOut") Do Until (rsi.EOF) For i = 1 To rsi!個数 rso.AddNew rso!品物 = rsi!品物 rso!個数 = 1 rso.Update Next rsi.MoveNext Loop rso.Close rsi.Close Set rso = Nothing Set rsi = Nothing End Sub
お礼
思った通りに結果が出ました。短時間に確実なアドバイスいただき感謝しています。今後は自分でもある程度はVBAを作成できる様にがんばります。
- komorebi99
- ベストアンサー率33% (15/45)
「分離後のテーブル」を新しいテーブルとするのであれば、VBAで比較的簡単に実現できます。 「元のテーブル」のレコードを順次読み、「品物」フィールドの内容のレコード数分レコードをコピーするイメージになるかと思います。
お礼
早々に回答ありがとうございました。考え方が大変参考になりました。
お礼
欲しい結果が得られました。これならVBAを一から書けない私でも理解できます。言われて見ると納得ですが、なかなか自分ではアイデアが出ないんですよね。感謝しています。