RecordsetのFilterで抽出数をカウントし削除する方法 - Access VBA入門
RecordsetのFilterプロパティを使って抽出を行います。抽出数のカウントはRecordCountプロパティで取得可能ですが、その場合、MoveLastで最終レコードに移動してから実行します。削除はループで該当レコードを1件ずつ行います。削除結果をフォームに反映させるには、Requeryメソッドでできます。
Filterについては、Filterの使い方|FilterOn|複数条件の設定方法|日付抽出|解除方法を参照してください。
下のような商品入荷一覧表のフォームを作成しました。
フォームフッターに、抽出する検索ワードを入力するテキストボックスと、[該当件数チェック]と[削除]ボタンを配置しました。
[該当件数チェック]ボタンをクリックすると、検索ワードで抽出し、該当するレコード数を表示します。
[削除]ボタンをクリックすると、検索ワードで抽出し、該当するレコードを削除後、フォームに反映させます。
RecordsetのFilterで抽出数をカウントする
[該当件数チェック]ボタンのクリックイベントのVBAです。
・フォームのレコードソースと同じテーブルでRecordsetを作成します。
・ワイルドカードを使った、あいまい検索をFilterに設定します。
・Filterの結果で、新しいRecordsetを作成します。
・RecordCount = 0 の場合、該当レコードがないのでメッセージを表示します。
・RecordCountが0でなければ、.MoveLastで最終レコードに移動し、RecordCountで該当レコード数を取得します。
・CloseとNothingでRecordsetを開放します。
Private Sub コマンド14_Click()
Dim rs As Recordset
Dim rsf As Recordset
Set rs = CurrentDb.OpenRecordset("T-商品入荷一覧表 のコピー", dbOpenDynaset)
rs.Filter = "商品名 Like
'*" & Me!テキスト11 & "*'"
Set rsf = rs.OpenRecordset
If rsf.RecordCount = 0 Then
MsgBox "該当するレコードが見つかりませんでした。"
Else
rsf.MoveLast
MsgBox rsf.RecordCount & "件のレコードが見つかりました。"
End If
rsf.Close
Set rsf = Nothing
rs.Close
Set rs = Nothing
End Sub
実行結果のフォームです。
商品名に、「焼き」のワードが含まれるレコードが2件見つかりました。
RecordsetのFilterで抽出したレコードを削除する
抽出結果のレコードを削除するVBAです。
・抽出のVBAは、上のカウントと同じです。
・削除は、Do~Loopを使い最終レコードまで、Deleteで削除します。
・削除が終了すると、Requeryでフォームを再表示します。
Private Sub コマンド15_Click()
Dim rs As Recordset
Dim rsf As Recordset
Set rs = CurrentDb.OpenRecordset("T-商品入荷一覧表 のコピー", dbOpenDynaset)
rs.Filter = "商品名 Like
'*" & Me!テキスト11 & "*'"
Set rsf = rs.OpenRecordset
If rsf.RecordCount = 0 Then
MsgBox "該当するレコードが見つかりませんでした。2"
Else
Do Until rsf.EOF
rsf.Delete
rsf.MoveNext
Loop
End If
rsf.Close
Set rsf = Nothing
rs.Close
Set rs = Nothing
Me.Requery
End Sub
Filterで抽出したレコードを削除した結果のフォームです。
商品名に「焼き」が含まれるレコードが削除され、表示されていません。