- ベストアンサー
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で回答いただけないでしょうか。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
宛名ラベルを指定位置から指定枚数 印刷する方法 http://www.f3.dion.ne.jp/~element/msaccess/AcTipsRptHowToPrintRabelSpecificNumber.html 上記の中程、 「宛名ラベルを個別に枚数を指定して印刷する方法」 のクエリの作り方が参考になるでしょう。 想定される「回数」 の最大がかなり大きいなら エクセルでドラッグでデータ入力し、インポートするのが速そうですね。
その他の回答 (1)
- nao-y
- ベストアンサー率58% (111/190)
繰り返し処理が入るので、クエリ(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の内容を全削除→挿入を 行っています。
お礼
有難うございます。すみませんが、別の方の回答がより分かりやすかったので、そちらをBAにします。
お礼
正にこの方法です。分かりやすいです。有難うございました。