こんにちは、Accessブロガーのなかぜんです。
「複数のデータを一気に更新したい!」「削除ボタンを1回で済ませたい!」そんなふうに感じたこと、ありませんか?
業務でAccessを使っていると、「一括でチェックしたデータだけ操作したい」と思う場面は意外と多いです。でも、手動で一件ずつ操作するのは手間がかかりますよね。
今回はそんなお悩みを解決する「チェックボックスで一括操作する方法」を、初心者の方にもわかりやすくご紹介します!
チェックボックス一括操作とは?
まずは仕組みを簡単にイメージしてみましょう。
- 一覧フォームの各行にチェックボックスを設置
- チェックが入っているデータだけをVBAで抽出
- 選ばれたレコードだけ一括で更新または削除
これにより、操作ミスの防止や業務効率のアップが期待できます。
フォームの準備
① テーブルにフラグ用のフィールドを追加
まず、操作対象を判別するためのチェックボックス用フィールドをテーブルに追加しましょう。
フィールド名:処理対象
データ型 :Yes/No型
② 連続フォームにチェックボックスを配置
フォームを「連続フォーム」に設定し、「処理対象」フィールドをチェックボックスとして表示します。
▼こんな感じになります:
[☑] 顧客A
[☐] 顧客B
[☑] 顧客C
↓
[更新]ボタンで一括処理
実際のVBAコード例と解説
③ 選択されたレコードに対して処理を実行するVBA
ここでは「選ばれた顧客のステータスを”完了”に更新する例」を紹介します。
Private Sub btn一括更新_Click()
Dim db As DAO.Database
Dim rs As DAO.Recordset
Set db = CurrentDb
Set rs = db.OpenRecordset("SELECT * FROM 顧客マスタ WHERE 処理対象 = True", dbOpenDynaset)
Do While Not rs.EOF
rs.Edit
rs!ステータス = "完了"
rs!処理対象 = False 'チェックを外しておく
rs.Update
rs.MoveNext
Loop
rs.Close
Set rs = Nothing
Set db = Nothing
Me.Requery 'フォームを再表示
MsgBox "一括更新が完了しました!", vbInformation
End Sub
解説:
処理対象 = True
でチェックが入ったデータだけを抽出rs.Edit~rs.Update
でフィールドを更新- 処理後に
Requery
でフォームを更新
よくあるミス・注意点
- チェックボックスのフィールド名が違うとエラーになる
- テーブルが開かれてロックされていると更新できない
- クエリを使っている場合、更新できないこともある
事前にバックアップを取るようにしましょう。
中級者向け:トランザクションで安全に
複数データをまとめて操作する場合、途中でエラーが出ると一部だけ変更されるリスクがあります。
そこで、以下のようにトランザクション処理を使えば、「すべて成功したら反映、失敗したら元に戻す」が可能です。
db.BeginTrans
On Error GoTo エラー処理
'処理(前述と同様)
...
db.CommitTrans
Exit Sub
エラー処理:
db.Rollback
MsgBox "エラーが発生しました。処理は取り消されました", vbExclamation
業務用として使う場合は、ぜひ検討してみてくださいね。
まとめ:できるようになると超便利!
今回は、Accessフォームでチェックボックスを使って一括処理する方法をご紹介しました。
- Yes/No型フィールドでチェック対象を判定
- 連続フォームで視覚的に操作
- VBAで対象データのみ更新・削除が可能
業務の効率化にすぐ活用できるテクニックです!
それでは、また次回の記事でお会いしましょう!
