質問: 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で回答いただけないでしょうか。
回答: 繰り返し処理が入るので、クエリ(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の内容を全削除→挿入を 行っています。