ACCESS2003の質問です。

下記のようなテーブルがあるのですが、
このテーブル1の行数をもとにして、番号ごとに
行数分重複したレコードを持つ、テーブル2を作成したいです。
方法を教えてください。


テーブル1

番号      行数
A01       2
B003       3
G2256      5



テーブル2

番号
A01
A01
B003
B003
B003
G2256
G2256
G2256
G2256
G2256

回答の条件
  • 1人5回まで
  • 登録:2009/07/10 18:18:06
  • 終了:2009/07/17 18:20:02

回答(4件)

id:nao_iwashima No.1

nao_iwashima回答回数15ベストアンサー獲得回数42009/07/10 19:09:04

ポイント23pt

VBSでよろしければ…

「hoge.mdb」を書き替えて、同じフォルダ階層に以下のソースを任意のファイル名&拡張子.vbsでと保存し、実行すると作成できますがいかがでしょう?

mdb = "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=hoge.mdb"

sql_array = array
set rs = createobject("adodb.recordset")
with rs
	.open "select 番号,行数 from テーブル1",mdb,3,3
	do while not .eof
		for i = 1 to rs("行数")
			n = ubound(sql_array)+1
			redim preserve sql_array(n)
			sql_array(n) = "insert into テーブル2 values ('" & rs("番号") & "')"
		next
		.movenext
	loop
	.close
end with
set rs = nothing

set cn = createobject("adodb.connection")
with cn
	.open(mdb)
	for each sql in sql_array
		.execute(sql)
	next
	.close
end with
set cn = nothing
id:rupopon

ありがとうございました。

出来ればACCESS内(VBA)で処理したいですが・・・

参考にさせていただきます。

2009/07/10 19:18:12
id:ken3memo No.2

ken3memo回答回数243ベストアンサー獲得回数752009/07/10 19:37:19

ポイント23pt

テーブル3をダミーで作ってください。

NO

1

2

3

4

5

100

とか、100個

1から連番で作ります。※行数が100以上あったらどうするの?と言われそうですが。。。

操作動画1 : http://www.youtube.com/watch?v=4eugTa77PjU

↑ダミーのテーブル作成

テーブル1と今作ったテーブル3で

テーブル同士を つなげないクエリー を作ります。

SELECT テーブル1.番号, テーブル1.行数

FROM テーブル1, テーブル3

すると、テーブル1 * テーブル3 の積で n個データが作られます。

操作動画2 : http://www.youtube.com/watch?v=NePK40e-hf4

↑つなげないクエリーと↓条件作成まで

このままでは、使えないので、

[no]<=[行数]

で、行数を絞り込みたいと思います。

SELECT テーブル1.番号, テーブル1.行数

FROM テーブル1, テーブル3

WHERE (((IIf([no]<=[行数],"OK","NG"))="OK"))

ORDER BY テーブル1.番号;

あとは、テーブル2に追加したいので、

INSERT INTO テーブル2 ( 番号, 行数)

SELECT テーブル1.番号, テーブル1.行数

FROM テーブル1, テーブル3

WHERE (((IIf([no]<=[行数],"OK","NG"))="OK"))

ORDER BY テーブル1.番号;

で、いいのかなぁ。

テーブル2の行数が余計ですが、こんな感じです。

(↑カッコつけて動画作ってから、あとから気が付きました(笑))

ダミーテーブルとSQL文を使ってみました。

外していたらスミマセン。何かの参考となれば幸いです。

( 手前味噌ページ http://www.ken3.org/vba/backno/vba147.html も見て笑ってください)

id:rupopon

ありがとうございました。参考にさせていただきます。

2009/07/12 10:17:59
id:nao_iwashima No.3

nao_iwashima回答回数15ベストアンサー獲得回数42009/07/10 19:48:05

ポイント22pt

無理やりVBAにしてみました。

Function ins()

	Set rs = CurrentDb.OpenRecordset("テーブル1", dbOpenTable)
	
	ReDim sql_array(0)
	
	With rs
	    Do While Not .EOF
	        For i = 1 To rs!行数
	            n = UBound(sql_array) + 1
	            ReDim Preserve sql_array(n)
	            sql_array(n) = "insert into テーブル2 values ('" & rs!番号 & "')"
	        Next
	        .MoveNext
	    Loop
	    .Close
	End With
	Set rs = Nothing
	
	For Each SQL In sql_array
	    If SQL <> "" Then
	        CurrentDb.Execute SQL
	    End If
	Next

End Function
id:rupopon

ありがとうございました。作ってみます。

2009/07/12 10:18:25
id:jccrh1 No.4

jccrh1回答回数111ベストアンサー獲得回数192009/07/11 00:53:16

ポイント22pt

VBAでDAOを使用して単純に作成しました。

Option Compare Database
Sub 自動作成()
  Dim daoDB  As Database
  Dim daoRS1 As Recordset
  Dim daoRS2 As Recordset
  Dim I      As Integer
  
  Set daoDB = CurrentDb
  Set daoRS1 = daoDB.OpenRecordset("テーブル1", dbOpenTable)
  Set daoRS2 = daoDB.OpenRecordset("テーブル2", dbOpenTable)
  Do While (Not (daoRS1.EOF))
  For I = 1 To daoRS1!行数
   daoRS2.AddNew
   daoRS2!番号 = daoRS1!番号
   daoRS2.Update
    Next I
    daoRS1.MoveNext
  Loop
  daoRS1.Close
  daoRS2.Close
  daoDB.Close
End Sub
id:rupopon

ありがとうございました。作ってみます。

2009/07/12 10:18:29

コメントはまだありません

この質問への反応(ブックマークコメント)

トラックバック

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません