• ベストアンサー

Access クエリについて

Accessのテーブル1に、フィールド「コード」「回数」があり、レコードとして A,32 B,20 C,13 ・・・というように、ランダムなコードと回数がセットされているとします。コードは主キーです。 このテーブル1を元にしたクエリで A,1 A,2 A,3 ・・・ A,32 B,1 B,2 ・・・ B,20 C,1 C,2 ・・・ C,13 というように、コードごとに「回数」と同じ数のレコードがクエリ上に生成されるようにしたいのですが、こういうことは出来るのでしょうか?出来ればSQLで回答いただけないでしょうか。

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

  • ベストアンサー
  • m3_maki
  • ベストアンサー率64% (296/460)
回答No.2

宛名ラベルを指定位置から指定枚数 印刷する方法 http://www.f3.dion.ne.jp/~element/msaccess/AcTipsRptHowToPrintRabelSpecificNumber.html 上記の中程、 「宛名ラベルを個別に枚数を指定して印刷する方法」 のクエリの作り方が参考になるでしょう。 想定される「回数」 の最大がかなり大きいなら エクセルでドラッグでデータ入力し、インポートするのが速そうですね。

absolute_space
質問者

お礼

正にこの方法です。分かりやすいです。有難うございました。

その他の回答 (1)

  • nao-y
  • ベストアンサー率58% (111/190)
回答No.1

繰り返し処理が入るので、クエリ(SQL)では無理なんじゃないでしょうか。 VBAなら以下のソースで実現できますよ。 挑戦されてみてはいかがでしょう? ---from-------------- Function fncCreateTable2() As Boolean Call subCreateTable2 MsgBox "テーブル2を作成しました" fncCreatetable = True End Function Sub subCreateTable2() Const myTbl1 = "テーブル1" Const myTbl2 = "テーブル2" Dim myDb As DAO.Database Dim myRS1 As DAO.Recordset Dim myRS2 As DAO.Recordset Dim i As Long Set myDb = CurrentDb myDb.Execute "DELETE * FROM " & myTbl2 Set myRS1 = myDb.OpenRecordset(myTbl1) Set myRS2 = myDb.OpenRecordset(myTbl2) Do Until myRS1.EOF For i = 1 To myRS1(1).Value With myRS2 .AddNew .Fields(0).Value = myRS1(0).Value .Fields(1).Value = i .Update End With Next i myRS1.MoveNext Loop myRS1.Close myRS2.Close myDb.Close Set myRS1 = Nothing Set myRS2 = Nothing Set myDb = Nothing End Sub ---to---------------- 以下の手順で実行できます。 0.(前提)Accessデータベース上に以下のテーブルがあるものとする。  テーブル1→項目「コード」(主キー)、「回数」  テーブル2→項目「コード」、「回数」(主キーなし) 1.Accessのデータベース画面の「オブジェクト」から  「モジュール」を選択し、「新規作成」ボタンを押す。 2.VBエディタ画面が開くので、一番広いウィンドウに  上のコードの、---from--------------の下の行から  ---to----------------の上の行までをコピー&ペーストする。 3.メニューバーの[ツール]→[参照設定]を選択し、  Microsoft DAO 3.x Object Library  にチェックを入れる。 4.保存ボタンを押し、  「次のオブジェクトへの変更を保存しますか?」→「はい」  「名前をつけて保存」→(デフォルトのモジュール名Module1を変更せずに)「OK」  を押す。 5.メニューバーの[ファイル]→[終了してMicrosoftAccessへ戻る]を選択し、  Access画面へ戻る。 6.Accessデータベース画面の「オブジェクト」から  「マクロ」を選択し、「新規作成」ボタンを押す。 7.表示された画面の1行目の「アクション」列のプルダウンボタンを押し、  プロシージャの実行を選択する。 8.同画面の下の方に「プロシージャ名」という入力欄が現れるので、  「fncCreateTable2 () 」と入力し、画面を閉じる。  「変更を保存しますか?」→「はい」  「名前をつけて保存」→(デフォルトのマクロ名「マクロ1」を変更せずに)「OK」 9.Accessデータベース画面で、「マクロ1」を選択し、「実行」ボタンを押す。 ちなみに、マクロを実行するたびに、テーブル2の内容を全削除→挿入を 行っています。

absolute_space
質問者

お礼

有難うございます。すみませんが、別の方の回答がより分かりやすかったので、そちらをBAにします。