RecordsetのFilterで抽出数をカウントし削除する方法 - Access VBA入門

RecordsetのFilterプロパティを使って抽出を行います。抽出数のカウントはRecordCountプロパティで取得可能ですが、その場合、MoveLastで最終レコードに移動してから実行します。削除はループで該当レコードを1件ずつ行います。削除結果をフォームに反映させるには、Requeryメソッドでできます。

Filterについては、Filterの使い方|FilterOn|複数条件の設定方法|日付抽出|解除方法を参照してください。

BackHome BackVBA入門


下のような商品入荷一覧表のフォームを作成しました。
フォームフッターに、抽出する検索ワードを入力するテキストボックスと、[該当件数チェック]と[削除]ボタンを配置しました。
[該当件数チェック]ボタンをクリックすると、検索ワードで抽出し、該当するレコード数を表示します。
[削除]ボタンをクリックすると、検索ワードで抽出し、該当するレコードを削除後、フォームに反映させます。
商品入荷一覧表のフォームに[該当件数チェック]と[削除]ボタンを配置

RecordsetのFilterで抽出数をカウントする

[該当件数チェック]ボタンのクリックイベントのVBAです。
[該当件数チェック]ボタンのクリックイベントの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

・抽出の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で抽出したレコードを削除した結果のフォームです。
商品名に「焼き」が含まれるレコードが削除され、表示されていません。
Filterで抽出したレコードを削除した結果のフォーム

BackHome BackVBA入門

Copyright(C) FeedSoft