PR

Access VBA逆引き集|処理時間を見える化する「パフォーマンスログ機能」実践テクニックとCopilot活用術

VBA

Accessシステムの運用が長くなると、利用者から次のような相談を受けることがあります。

  • 最近動作が遅くなった
  • 集計処理の時間が長い
  • CSV取込に時間がかかる
  • 原因が分からない

このような場合に有効なのが「パフォーマンスログ機能」です。

結論から言うと、Access VBAで処理時間を記録する仕組みを実装することで、どの処理に時間がかかっているのかを可視化できます。

近年は、CSV取込自動化、Excel連携、自動メール送信、エラー処理などの開発が増えていますが、それらの運用が始まると次に課題となるのが「性能管理」です。そこで今回はAccess VBAによるパフォーマンスログ機能の実装方法とCopilot活用術について紹介します。


スポンサーリンク

なぜ処理時間の計測が重要なのか

開発直後は問題なくても、運用開始後は次のような変化が起こります。

  • データ件数増加
  • ネットワーク負荷増加
  • 利用者増加
  • テーブル肥大化

すると処理時間が徐々に長くなります。

しかし、

遅い

という情報だけでは改善できません。

重要なのは、

どの処理が

何秒かかっているか

を把握することです。


パフォーマンスログとは

簡単に言うと、

処理開始

処理終了

経過時間記録

を行う仕組みです。

例えば

処理名時間
CSV取込2秒
集計処理8秒
帳票出力1秒

という情報が取得できます。


ログテーブルを作成する

まずテーブルを準備します。

T_PERFORMANCE_LOG

項目名内容
IDオートナンバー
実行日時日時
処理名短いテキスト
処理時間数値
ユーザー名短いテキスト

運用時の分析に利用します。


逆引き① 開始時間を取得したい

最も基本となるコードです。

Dim StartTime As Date

StartTime = Now()

処理開始時刻を保存します。


逆引き② 終了時間を取得したい

処理終了時です。

Dim EndTime As Date

EndTime = Now()

開始時間との差分を求められます。


逆引き③ 経過秒数を計算したい

実務で最も利用します。

Dim dblSec As Double

dblSec = _

DateDiff("s", _

StartTime, _

EndTime)

結果

5

なら5秒です。


逆引き④ ミリ秒単位で計測したい

より詳細に確認したい場合です。

Dim dblTime As Double

dblTime = Timer

処理終了時

Debug.Print _

Timer - dblTime

高精度な計測が可能です。


逆引き⑤ ログをテーブルへ保存したい

実際の運用で必要な処理です。

CurrentDb.Execute _

"INSERT INTO " & _

"T_PERFORMANCE_LOG(" & _

"実行日時,処理名,処理時間)" & _

"VALUES(" & _

"Now()," & _

"'CSV取込'," & _

"5)"

履歴として残せます。


実践例① CSV取込時間の測定

CSV取込前後を計測します。

Dim StartTime As Double

StartTime = Timer

DoCmd.TransferText _

acImportDelim, _

"", _

"T_DATA", _

"C:\Data\Test.csv"

MsgBox _

Timer - StartTime

CSVサイズ増加による影響を確認できます。


実践例② Excel取込時間の測定

Excel連携でも利用できます。

StartTime = Timer

DoCmd.TransferSpreadsheet _

acImport, _

acSpreadsheetTypeExcel12Xml, _

"T_DATA", _

"C:\Test.xlsx", _

True

Debug.Print _

Timer - StartTime

Excelファイルごとの傾向を把握できます。


実践例③ クエリ処理時間の測定

更新クエリに利用します。

StartTime = Timer

CurrentDb.Execute _

strSQL

Debug.Print _

Timer - StartTime

SQL改善の判断材料になります。


実践例④ PDF出力時間の測定

帳票システムでよく使います。

StartTime = Timer

DoCmd.OutputTo _

acOutputReport, _

"R_売上報告", _

acFormatPDF, _

strFile

Debug.Print _

Timer - StartTime

PDF生成速度を確認できます。


よくある分析パターン

ログが蓄積すると様々な分析が可能です。

遅い処理ランキング

SELECT

処理名,

Avg(処理時間)

FROM

T_PERFORMANCE_LOG

GROUP BY

処理名

月別推移確認

SELECT

Format(実行日時,'yyyy/mm'),

Avg(処理時間)

FROM

T_PERFORMANCE_LOG

GROUP BY

Format(実行日時,'yyyy/mm')

性能悪化を早期に発見できます。


実務活用例① 月次集計システム

月末になると件数が増加します。

ログ収集により、

月初 5秒

月末 40秒

といった変化を把握できます。


実務活用例② CSV自動取込

大量データ取込では効果的です。

100件 1秒

1000件 5秒

10000件 50秒

将来の性能予測にも利用できます。


実務活用例③ 利用者クレーム対策

利用者から

遅い

と言われた場合も、

ログを見ることで客観的に判断できます。


Copilot活用術① 計測コード生成

Copilotへ次のように依頼します。

Access VBAで

処理時間計測機能を作ってください。

条件

・ログテーブル保存

・開始終了管理

・エラー処理あり

かなり実用的なコードを生成できます。


Copilot活用術② SQL改善

ログで遅い処理が見つかったら、

このSQLが遅い原因を分析してください

と依頼します。

インデックスや結合条件の改善案を検討する際に役立ちます。


Copilot活用術③ ログ分析支援

例えば、

CSV取込時間の推移から

問題点を分析してください

と依頼できます。

パフォーマンス分析の補助として活用できます。


パフォーマンス改善のポイント

インデックスを活用する

検索速度向上につながります。

不要なクエリを削減する

実行回数を見直します。

レコードセットを適切に利用する

不要な検索を減らします。

アーカイブ運用を行う

データ肥大化を防ぎます。

ログを継続取得する

継続的な監視が重要です。


エラー処理も組み込む

測定処理にもエラー対策を実装します。

On Error GoTo ErrHandler

'処理

Exit Sub

ErrHandler:

MsgBox Err.Description

安定運用には欠かせません。


AccessとCopilotの組み合わせが強力な理由

最近はCopilotによる支援により、

  • VBAコード生成
  • SQL作成
  • ドキュメント作成
  • エラー解析
  • 性能分析

の効率が大きく向上しています。

特にパフォーマンス改善は経験が必要な分野ですが、Copilotを活用することで改善のヒントを短時間で得られるようになりました。


まとめ

Accessシステムは長期運用が前提になることが多いため、性能管理は非常に重要です。

パフォーマンスログ機能を導入することで、

  • 処理時間の見える化
  • 性能悪化の早期発見
  • ボトルネック分析
  • 利用者対応

が容易になります。

さらにCopilotを活用することで、

  • 計測コード作成
  • SQL改善
  • ログ分析
  • 保守性向上

を効率的に進められます。

システムが遅くなってから対策するのではなく、開発段階からパフォーマンスログを組み込んでおくことが、長期間安定して運用するための重要なポイントです。

コメント

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