- 締切済み
ACCESS2003
ACCESS2003 OS:winXPです。 アクセスのテーブルのデータが以下のようになっています。 ID |名称|番号1|番号2|番号3|・・・・・|番号30| 100|太郎|0001|1231|4323|・・・・ 101|次郎|2333|3213|4225|・・・・ ・・・ 番号1~番号30にはIDに紐づくランダムな値が入っています。 IDによって紐づく番号が存在するだけ、30まで列に入っています。 番号30まであるものもあれば、番号1しかないものもあります。 これを以下のように変えたいと思っています。 ID |名称|番号 | 100|太郎|0001| 100|太郎|1231| 100|太郎|4323| ・ ・ 101|次郎|2333| 101|次郎|3213| なにかクエリ、VBAなどでいい方法はないでしょうか?
- みんなの回答 (5)
- 専門家の回答
みんなの回答
- nda23
- ベストアンサー率54% (777/1415)
以下のようなSQLを持つクエリを作成する。 SELECT ID,名前,番号1 FROM テーブル UNION ALL SELECT ID,名前,番号2 FROM テーブル UNION ALL SELECT ID,名前,番号3 FROM テーブル 中略 UNION ALL SELECT ID,名前,番号30 FROM テーブル
- piroin654
- ベストアンサー率75% (692/917)
For n = 1 To 7 Step 1 ではなく、 For n = 1 To 30 Step 1 にしてください。番号が30まであるという ことなので。
- piroin654
- ベストアンサー率75% (692/917)
失礼しました。駄作はわすれてください。 以下で十分です。設定は同じです。 Function funcDATA1() Dim db As Database Dim rs1 As Recordset Dim rs2 As Recordset Dim x As String Dim n As Integer Set db = CurrentDb Set rs1 = db.OpenRecordset("tblT") Set rs2 = db.OpenRecordset("tblDATA") With rs1 rs1.MoveFirst Do Until rs1.EOF For n = 1 To 7 Step 1 x = "番号" & n rs2.AddNew rs2!ID = rs1!ID rs2!名称 = rs1!名称 rs2!番号 = rs1.Fields(x) rs2.Update Next n rs1.MoveNext Loop End With End Function
- piroin654
- ベストアンサー率75% (692/917)
何も考えずにただデータの移し変えという ことであれば、以下の方法もあります。 当初は配列変数でと思ったのですが めんどうくさいのでコピペのエイヤで どうぞ。 一応tblTがデータが入っているほうで、 tblDATAが移動先です。処理が終わったら テーブルを昇順で並び替えれば終了です。 なお、移動先のIDには主キーを設定しないように。 Function funcDATA() Dim db As Database Dim rs1 As Recordset Dim rs2 As Recordset ' Dim x(1 To 30) As String Set db = CurrentDb Set rs1 = db.OpenRecordset("tblT") Set rs2 = db.OpenRecordset("tblDATA") With rs1 rs1.MoveFirst Do Until rs1.EOF rs2.AddNew rs2!ID = rs1!ID rs2!名称 = rs1!名称 rs2!番号 = rs1!番号1 rs2.Update rs2.AddNew rs2!ID = rs1!ID rs2!名称 = rs1!名称 rs2!番号 = rs1!番号2 rs2.Update rs2.AddNew rs2!ID = rs1!ID rs2!名称 = rs1!名称 rs2!番号 = rs1!番号3 rs2.Update rs2.AddNew rs2!ID = rs1!ID rs2!名称 = rs1!名称 rs2!番号 = rs1!番号4 rs2.Update rs2.AddNew rs2!ID = rs1!ID rs2!名称 = rs1!名称 rs2!番号 = rs1!番号5 rs2.Update rs2.AddNew rs2!ID = rs1!ID rs2!名称 = rs1!名称 rs2!番号 = rs1!番号6 rs2.Update rs2.AddNew rs2!ID = rs1!ID rs2!名称 = rs1!名称 rs2!番号 = rs1!番号7 rs2.Update rs1.MoveNext Loop End With End Function 途中までしか書いていません。 rs2.AddNew rs2!ID = rs1!ID rs2!名称 = rs1!名称 rs2!番号 = rs1!番号7 rs2.Update 以下におなじものをあと17個コピペして rs1!番号7のところを順次番号を変更して ください。というより1から7までコピペ して番号を変えていったら2、3回のコピペ ですみます。あとは番号を変更。 では。
- nza49739
- ベストアンサー率46% (29/62)
以下の手順で作成します。 1 番号1、番号2・・・番号30のみそれぞれのみ選択するクエリーを用意します。番号がないものは、もちろん番号が設定されているものに限定するようにします。 2 1で作成したクエリーをまとめます。まとめるにはクエリーを新規作成し、右クリックのメニューの中の"SQL"の中の"ユニオン"を選択することで作成できるようになります。そして、"Select * from クエリー名1 Union Select * from クエリー名2 "でまとめます。 しかし、データが多いとこの方法では遅くなりますので、作業用のテーブルに1で作成したクエリーデータを挿入するほうが賢明です。