【Access VBA】rs.Editの使い方|Updateとの違いを解説

Access VBAでテーブルデータを更新する際に使うのが、rs.Editです。
ただ、初心者だと、
- なぜEditが必要なの?
- Updateとの違いは?
- どんなタイミングで使うの?
- 書かないとどうなる?
と疑問を持つことが多いです。
Access VBAでは、Recordsetを使ったデータ更新処理が非常によく使われます。
その中でも、rs.Editはレコード編集の開始を行う重要な命令です。
この記事では、rs.Editの使い方とUpdateとの違いを解説初心者向けにわかりやすく解説します。
rs.Editとは?
rs.Editは、「これからレコードを編集します」とAccessへ伝えるための命令です。
主にDAO.Recordsetで既存データを更新するときに使用します。

基本構文はこちらです。
rs.Editただし、Editだけではデータは保存されません。
実際には次の流れで使います。
- Editで編集開始
- フィールドの値を変更
- Updateで保存
Access VBAでは非常に基本となるレコード更新処理です。
rs.Editの基本的な使い方
実際のコードを見てみましょう。
Dim db As DAO.Database
Dim rs As DAO.Recordset
Set db = CurrentDb
Set rs = db.OpenRecordset("T_社員")
rs.MoveFirst
rs.Edit
rs!社員名 = "田中"
rs!部署 = "営業"
rs.Update
rs.Close
Set rs = Nothing
Set db = Nothingコード全体の目的
テーブル「T_社員」の先頭レコードを更新するコードです。
社員名と部署を変更しています。
コード解説
Dim db As DAO.Database
Dim rs As DAO.Recordsetデータベース操作用の変数と、レコード操作用のRecordset変数を定義しています。
Set db = CurrentDb現在開いているAccessデータベースを取得しています。

Set rs = db.OpenRecordset("T_社員")テーブル「T_社員」を開いています。
rs.MoveFirst先頭レコードへ移動しています。
rs.Editレコードを編集可能な状態にしています。
rs!社員名 = "田中"
rs!部署 = "営業"社員名と部署を更新しています。
rs.Update変更内容を保存しています。
rs.EditとUpdateの違い
初心者がかなり混乱しやすいのが、EditとUpdateの違いです。
| メソッド | 役割 |
|---|---|
| Edit | 編集開始 |
| Update | 変更保存 |
つまり、次のような流れになります。
rs.Edit
↓
値変更
↓
rs.Update
という流れになります。
イメージとしては、
- Edit → 編集モードに入る
- Update → 保存ボタンを押す
に近いです。
この順番を間違えるとエラーになるため注意してください。
また、新規追加の場合は、rs.AddNewを使用します。

rs.Editでよくあるエラーと注意点
Editを書かずに更新する
次のコードはエラーになります。
rs!社員名 = "田中"
rs.UpdateこれはEditを書いていないためです。
Access VBAでは、Edit → 値変更 → Updateの順番が必要です。
Updateを忘れる
初心者がかなりやりがちなミスです。
rs.Edit
rs!社員名 = "田中"この場合、変更内容は保存されません。
必ず最後に、rs.Updateが必要です。
レコードが存在しない
Recordsetにデータが存在しない状態で、rs.MoveFirstを実行するとエラーになります。
実務では次のようなチェックを行うことが多いです。
If rs.EOF = False Then
rs.Edit
rs!社員名 = "田中"
rs.Update
End IfEOFは、「レコードが存在しない状態」を判定するプロパティです。
業務システムでは非常によく使います。

更新できないクエリを開いている
クエリによっては更新不可になる場合があります。
例えば、
- 集計クエリ
- DISTINCTを使ったクエリ
- 複雑な結合クエリ
などは編集できないケースがあります。
実務での活用ポイント
rs.Editは業務システム開発で非常によく使います。
例えば、一括更新処理では次のようなコードをよく使います。
Do While Not rs.EOF
rs.Edit
rs!状態 = "完了"
rs.Update
rs.MoveNext
Loopこのコードは、全レコードの状態を「完了」に変更しています。
実務ではこのようなループ更新処理がかなり多いです。
ただし、大量データ更新では処理速度が遅くなることがあります。
その場合は、UPDATEクエリを使ったほうが高速になるケースもあります。

まとめ
rs.Editは、「これからレコードを編集する」ことをAccessへ伝える命令です。
基本的には、
rs.Edit
↓
値変更
↓
rs.Update
の流れで覚えると理解しやすいです。
まずは小さなテーブルで実際に試しながら覚えていくのがおすすめです。
コメント