• ベストアンサー

Accessのテーブルを展開する

Accessのテーブルを下の例の様に分離させることは出来ないでしょうか? VBA、クエリ等手法は問いませんのでヒントをいただければ幸いです。 (元のテーブル) 品物 個数 A   3 B   2 (分離後のテーブル) 品物 個数 A   1 A   1 A   1 B   1 B   1 以上、よろしくお願いいたします。

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

  • ベストアンサー
  • O_cyan
  • ベストアンサー率59% (745/1260)
回答No.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個数を使えばお望みになるはずです。 最大個数がそんなに大きくなければこれが簡単です。 試してみてください。

joe7jp
質問者

お礼

欲しい結果が得られました。これならVBAを一から書けない私でも理解できます。言われて見ると納得ですが、なかなか自分ではアイデアが出ないんですよね。感謝しています。

その他の回答 (2)

noname#21550
noname#21550
回答No.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

joe7jp
質問者

お礼

思った通りに結果が出ました。短時間に確実なアドバイスいただき感謝しています。今後は自分でもある程度はVBAを作成できる様にがんばります。

回答No.1

「分離後のテーブル」を新しいテーブルとするのであれば、VBAで比較的簡単に実現できます。 「元のテーブル」のレコードを順次読み、「品物」フィールドの内容のレコード数分レコードをコピーするイメージになるかと思います。

joe7jp
質問者

お礼

早々に回答ありがとうございました。考え方が大変参考になりました。

関連するQ&A