AccessVBAメモ

AccessVBAで作ったサンプルコード集

AccessVBA Do Loop 処理回数をレコード内容によって繰返し処理を行う

スポンサーリンク

レコード内容によって処理(追加)を繰り返し行う。

Do〜Loop構文を使って行ってみた。

<元データ>

f:id:sebastiansubway:20170905190639j:plain

<追加後の完成イメージ>

ここでは数量フィールドの内容によって、例えば数量=1だと1回、数量=2だと2回レコードの追加処理を行っている。

繰り返し追加した回数をカウントフィールドに記述してある。

 

f:id:sebastiansubway:20170905190944j:plain

以下、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:最初のレコード

参考資料

アクセスVBA講座_レコード移動(DAO編)