PR

Access VBA逆引き集|CurrentDb.Executeを極める!高速なデータ更新を実現する実践テクニックとCopilot活用術

VBA

Access VBAを開発していると、

  • 大量データを一括更新したい
  • レコードセット処理が遅い
  • CSV取込後に一括変換したい
  • 削除処理を高速化したい
  • バッチ処理を効率化したい

という場面が頻繁にあります。

データの追加・更新・削除を行う場合はDAO RecordsetよりCurrentDb.Executeを優先的に検討するべきです。

実務では、

売上確定処理

CSV取込後の更新

履歴作成

在庫更新

バッチ処理

など、多くのシステムで利用されています。

Access VBA開発者なら必ず覚えておきたい重要機能です。


スポンサーリンク

CurrentDb.Executeとは

CurrentDb.Executeは、

SQLを直接実行

↓

高速処理

↓

結果反映

する機能です。


なぜExecuteが重要なのか

初心者がよく書くコードです。

Do Until rs.EOF

rs.Edit

rs!区分 = "A"

rs.Update

rs.MoveNext

Loop

1000件なら問題ありません。

しかし

10万件

50万件

100万件

になると非常に遅くなります。


Executeを利用すると

CurrentDb.Execute _

"UPDATE T_CUSTOMER " & _

"SET 区分='A'"

になります。


効果

高速

簡潔

保守しやすい

になります。


基本構文

CurrentDb.Execute strSQL


サンプル

CurrentDb.Execute _

"UPDATE T_CUSTOMER " & _

"SET 顧客区分='A'"

逆引き① データを更新したい

最も利用頻度が高い処理です。

CurrentDb.Execute _

"UPDATE T_CUSTOMER " & _

"SET 顧客区分='A'"

結果

全件更新

できます。


逆引き② 条件付き更新したい

実務向けです。

CurrentDb.Execute _

"UPDATE T_CUSTOMER " & _

"SET 顧客区分='A' " & _

"WHERE 売上金額 > 100000"

効果

対象データのみ更新できます。


逆引き③ データを追加したい

INSERT文です。

CurrentDb.Execute _

"INSERT INTO T_CUSTOMER " & _

"(顧客コード,顧客名) " & _

"VALUES " & _

"('C001','東京商事')"

効果

レコード追加できます。


逆引き④ データを削除したい

DELETE文です。

CurrentDb.Execute _

"DELETE FROM T_WORK"

注意

全件削除になります。


条件付きがおすすめです。

CurrentDb.Execute _

"DELETE FROM T_WORK " & _

"WHERE 更新日 < Date()-30"

逆引き⑤ テーブルを初期化したい

一時テーブル管理です。

CurrentDb.Execute _

"DELETE FROM T_IMPORT"

活用

CSV取込前

一時データ削除

です。


RecordsAffectedで更新件数取得

実務では非常によく利用します。

CurrentDb.Execute strSQL

件数確認

Debug.Print _

CurrentDb.RecordsAffected

結果

更新件数

取得できます。


実務活用例① CSV取込システム

取込後のデータ補正です。


例

電話番号整形

CurrentDb.Execute _

"UPDATE T_IMPORT " & _

"SET 電話番号 = " & _

"Replace([電話番号],'-','')"

効果

一括補正できます。


実務活用例② 売上管理システム

月次処理です。

CurrentDb.Execute _

"UPDATE T_SALES " & _

"SET 状態='確定' " & _

"WHERE 売上月='202609'"

効果

大量更新できます。


実務活用例③ 顧客管理システム

ランク更新です。

CurrentDb.Execute _

"UPDATE T_CUSTOMER " & _

"SET ランク='VIP' " & _

"WHERE 年間売上 > 1000000"

効果

自動判定できます。


実務活用例④ ログ管理

古い履歴削除です。

CurrentDb.Execute _

"DELETE FROM T_LOG " & _

"WHERE 実行日 < Date()-90"

効果

容量削減できます。


実務活用例⑤ 夜間バッチ処理

定期更新です。

集計

更新

履歴作成

に利用します。


DAO Recordsetとの比較

Recordset

rs.Edit

rs.Update

向いている処理

1件編集

画面連携

個別処理


Execute

CurrentDb.Execute

向いている処理

一括更新

大量処理

バッチ処理


開発現場の基本方針

検索

↓

Recordset

更新

↓

Execute

が多いです。


dbFailOnErrorを利用する

実務では必須です。


通常

CurrentDb.Execute strSQL

推奨

CurrentDb.Execute _

strSQL, _

dbFailOnError

メリット

エラー検出できます。


トランザクションと組み合わせる

重要な更新です。

DBEngine.BeginTrans

CurrentDb.Execute _

strSQL1

CurrentDb.Execute _

strSQL2

DBEngine.CommitTrans

エラー

DBEngine.Rollback

効果

データ整合性を守れます。


ベテラン開発者の定番コード

実務で最もよく見る形です。

On Error GoTo ErrHandler

CurrentDb.Execute _

strSQL, _

dbFailOnError

MsgBox _

CurrentDb.RecordsAffected & _

"件更新"

Exit Sub

ErrHandler:

MsgBox _

Err.Description

非常に利用頻度が高いです。


Copilot活用術① UPDATE文作成

Copilotへの依頼例です。

Access VBAです。

CurrentDb.Executeで

顧客ランクを更新する

コードを作成してください。


Copilot活用術② SQLレビュー

以下のExecute用SQLを

レビューしてください。


Copilot活用術③ 高速化相談

Recordset更新処理です。

Executeへ変更して

高速化してください。


Execute利用時の注意点

SELECT文には使えない

検索は

OpenRecordset

です。


WHERE句忘れ

危険です。

UPDATE

すると全件更新になります。


DELETE文に注意

誤削除防止を考えましょう。


dbFailOnError推奨

品質向上につながります。


CurrentDb.Executeが向いている処理

特に活躍するのは次の処理です。

  • CSV取込後の補正
  • ランク更新
  • 在庫更新
  • バッチ処理
  • ログ削除
  • 売上確定
  • 履歴作成

開発現場での利用頻度

順位用途
1位UPDATE
2位DELETE
3位INSERT
4位バッチ処理
5位CSV取込補正

DAO開発では毎日のように利用します。


まとめ

CurrentDb.ExecuteはAccess VBAで高速なデータ更新を実現するための最重要機能の一つです。

特に

  • UPDATE
  • INSERT
  • DELETE
  • CSV取込
  • バッチ処理
  • 売上確定

などで大きな効果を発揮します。

初心者の方はまず次のコードを覚えましょう。

CurrentDb.Execute _

strSQL, _

dbFailOnError

これだけで実務システムの更新処理の大部分に対応できます。

Copilotと組み合わせることで、

  • SQL作成
  • コードレビュー
  • 高速化検討

も効率良く行えるようになります。

Access VBA逆引き大全 600の極意 Microsoft365/Office2024/2021/2019/2016対応 | E-Trainer.jp[中村峻] |本 | 通販 | Amazon
AmazonでE-Trainer.jp[中村峻]のAccess VBA逆引き大全 600の極意 Microsoft365/Office2024/2021/2019/2016対応。アマゾンならポイント還元本が多数。E-Trainer.jp[中…

コメント

タイトルとURLをコピーしました