利用規約の変更について

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で回答いただけないでしょうか。

このQ&Aに関連する最新のQ&A

A 回答 (2件)

宛名ラベルを指定位置から指定枚数 印刷する方法


http://www.f3.dion.ne.jp/~element/msaccess/AcTip …

上記の中程、
「宛名ラベルを個別に枚数を指定して印刷する方法」
のクエリの作り方が参考になるでしょう。

想定される「回数」 の最大がかなり大きいなら
エクセルでドラッグでデータ入力し、インポートするのが速そうですね。
    • good
    • 0
この回答へのお礼

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

お礼日時:2012/05/26 18:14

繰り返し処理が入るので、クエリ(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の内容を全削除→挿入を
行っています。
    • good
    • 0
この回答へのお礼

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

お礼日時:2012/05/26 18:15

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


人気Q&Aランキング