AccessVBA Do Loop 処理回数をレコード内容によって繰返し処理を行う
スポンサーリンク
レコード内容によって処理(追加)を繰り返し行う。
Do〜Loop構文を使って行ってみた。
<元データ>
<追加後の完成イメージ>
ここでは数量フィールドの内容によって、例えば数量=1だと1回、数量=2だと2回レコードの追加処理を行っている。
繰り返し追加した回数をカウントフィールドに記述してある。
以下、VBAの記述
'-------------------------------------------------------------------------------------------
Public Function createCount()
Dim db As Database
Dim rst As Recordset
Dim rst1 As Recordset
Dim strSQL As String
Dim i As Integer
DoCmd.SetWarnings False
DoCmd.RunSQL "DELETE*FROM CountTbl;" '追加するテーブルデータを消去
Set db = CurrentDb
strSQL = "SELECT originTbl.* FROM originTbl;"
Set rst1 = db.OpenRecordset(strSQL, dbOpenSnapshot) '追加元のテーブル
Set rst = db.OpenRecordset("CountTbl") '追加先のテーブル
If rst1.RecordCount <> 0 Then
i = 0
Do Until rst1.EOF
rst.AddNew
i = i + 1 'カウンタ
rst!日付 = rst1!日付
rst!商品 = rst1!商品
rst!数量 = rst1!数量
rst!カウント = i
rst.Update
If i < rst1!数量 Then 'カウンタが数量未満なら同一レコードを繰り返し追加
rst1.Move 0
Else
rst1.MoveNext 'カウンタが数量と同数なら次のレコードへ移る
i = 0
End If
Loop
rst.Close
rst1.Close
db.Close
Set db = Nothing
End If
End Function
'----------------------------------------------------------------------------------------------
以上、終わり
ちなみに
MoveNext : 次のレコード
MovePrevious:1つ前のレコード
MoveLast:最終のレコード
MoveFirst:最初のレコード
参考資料