Accessシステムを長年運用していると、次のような要望が頻繁に発生します。
- 保存先フォルダを変更したい
- メール送信先を変更したい
- CSV取込先を変更したい
- 集計対象期間を変更したい
- 利用部門ごとに設定を変えたい
そのたびにVBAを修正していると、保守作業が増え、誤修正のリスクも高くなります。
結論から言うと、これらの設定をテーブル化することで、利用者自身が設定を変更できる「ノーコード運用」に近い仕組みを実現できます。
近年はCopilotによる開発効率向上が注目されていますが、実は運用段階で最も効果が高い改善の一つが「設定テーブル化」です。Copilotでコードを作るだけでなく、保守しやすいシステム設計を行うことが重要です。
- はじめに
- 設定テーブルとは
- 設定テーブル化のメリット
- 逆引き① 設定値を取得したい
- 逆引き② 設定値が存在するか確認したい
- 逆引き③ フォルダ設定を管理したい
- 逆引き④ メール送信先を管理したい
- 逆引き⑤ PDF保存先を管理したい
- 逆引き⑥ バックアップ保存期間を管理したい
- 実践例① CSV取込システム
- 実践例② メール自動送信
- 実践例③ PDF出力
- 共通関数を作る
- 設定変更履歴を管理する
- 実務活用例① 部門ごとに設定を変更
- 実務活用例② 本番・テスト環境切替
- 実務活用例③ API連携
- Copilot活用術① 設定管理機能作成
- Copilot活用術② 設計レビュー
- Copilot活用術③ テーブル設計支援
- よくある失敗例
- エラー処理も実装する
- AI時代でも重要な設計力
- まとめ
はじめに
Accessシステムでよく見かけるコードがあります。
strFolder = "C:\Import"
strMail = "sample@example.com"
strPath = "\Server\Data"
開発時は問題ありません。
しかし運用開始後には、
フォルダ変更
サーバ移行
メールアドレス変更
が発生します。
そのたびにVBA修正を行うと保守コストが増加します。
設定テーブルとは
設定情報をテーブルで管理する仕組みです。
例えば次のような構成です。
T_SYSTEM_CONFIG
| 設定名 | 設定値 |
|---|---|
| IMPORT_FOLDER | C:\Import |
| BACKUP_FOLDER | D:\Backup |
| MAIL_TO | sample@example.com |
VBAはテーブルから値を取得します。
設定テーブル化のメリット
VBA修正不要
利用者が値を変更できます。
保守性向上
ソース修正を減らせます。
障害リスク低減
プログラム改修ミスを防げます。
運用担当者でも変更可能
システム担当以外でも設定変更できます。
逆引き① 設定値を取得したい
もっとも基本的な方法です。
Dim strFolder As String
strFolder = _
DLookup( _
"設定値", _
"T_SYSTEM_CONFIG", _
"設定名='IMPORT_FOLDER'")
これだけで取得できます。
逆引き② 設定値が存在するか確認したい
事前チェックを行います。
If IsNull( _
DLookup( _
"設定値", _
"T_SYSTEM_CONFIG", _
"設定名='MAIL_TO'")) Then
MsgBox "設定がありません"
End If
運用トラブル防止になります。
逆引き③ フォルダ設定を管理したい
CSV取込でよく利用します。
テーブル
| 設定名 | 設定値 |
|---|---|
| CSV_FOLDER | C:\Import |
取得
strFolder = DLookup( _
"設定値", _
"T_SYSTEM_CONFIG", _
"設定名='CSV_FOLDER'")
柔軟な運用が可能になります。
逆引き④ メール送信先を管理したい
Outlook送信と組み合わせます。
strMail = DLookup( _
"設定値", _
"T_SYSTEM_CONFIG", _
"設定名='MAIL_TO'")
送信先変更時に改修が不要です。
逆引き⑤ PDF保存先を管理したい
帳票システムで便利です。
strPDFFolder = DLookup( _
"設定値", _
"T_SYSTEM_CONFIG", _
"設定名='PDF_FOLDER'")
運用環境ごとに変更できます。
逆引き⑥ バックアップ保存期間を管理したい
数値管理も可能です。
テーブル
| 設定名 | 設定値 |
|---|---|
| BACKUP_DAYS | 30 |
取得
Dim lngDays As Long
lngDays = CLng( _
DLookup( _
"設定値", _
"T_SYSTEM_CONFIG", _
"設定名='BACKUP_DAYS'"))
実践例① CSV取込システム
従来
“C:\Import”
固定指定。
改善後
strFolder = _
GetConfig("CSV_FOLDER")
フォルダ変更時の修正不要。
実践例② メール自動送信
従来
.To = “manager@sample.co.jp“
改善後
.To = _
GetConfig(“MAIL_TO”)
担当者変更に強くなります。
実践例③ PDF出力
従来
“C:\PDF”
改善後
GetConfig(“PDF_FOLDER”)
サーバ移行時にも対応しやすくなります。
共通関数を作る
実務では関数化がおすすめです。
Public Function _
GetConfig( _
ByVal ConfigName As String) _
As String
GetConfig = Nz( _
DLookup( _
"設定値", _
"T_SYSTEM_CONFIG", _
"設定名='" & _
ConfigName & "'"), _
"")
End Function
利用例
strFolder = _
GetConfig("CSV_FOLDER")
非常に見やすくなります。
設定変更履歴を管理する
重要システムでは履歴管理も行います。
T_CONFIG_LOG
| 項目 |
|---|
| 変更日時 |
| 設定名 |
| 変更前 |
| 変更後 |
| 更新者 |
運用監査で役立ちます。
実務活用例① 部門ごとに設定を変更
例えば、
横浜事業所
大阪事業所
東京事業所
で保存先を分けられます。
実務活用例② 本番・テスト環境切替
設定テーブルだけ変更します。
TEST
PRODUCTION
を簡単に切替可能です。
実務活用例③ API連携
APIアドレス管理にも利用できます。
API_URL
を設定値として保持します。
将来のシステム変更に対応しやすくなります。
Copilot活用術① 設定管理機能作成
次のように依頼します。
Access VBAで
設定テーブル管理機能を
作成してください。
条件
・DLookup利用
・共通関数化
・エラー処理あり
実践的なコードを生成できます。
Copilot活用術② 設計レビュー
設定管理機能を作成した後、
保守性の観点で
改善案を教えてください
と依頼します。
設計上の改善点を発見できます。
Copilot活用術③ テーブル設計支援
例えば、
Accessシステムの
設定管理テーブルを
設計してください。
と依頼します。
実装前の検討材料として有効です。
よくある失敗例
ハードコーディング
“C:\Data”
を直接記載する。
設定値の重複
同じ意味の設定を複数登録する。
マスタ未整備
設定命名規則を決めていない。
更新履歴なし
誰が変更したか分からなくなる。
エラー処理も実装する
設定取得時のエラーに備えます。
On Error GoTo ErrHandler
strPath = _
GetConfig("CSV_FOLDER")
Exit Sub
ErrHandler:
MsgBox Err.Description
長期運用では重要です。
AI時代でも重要な設計力
生成AIによって、
- VBAコード作成
- SQL作成
- エラー解析
は効率化できます。
しかし、
保守しやすい設計
変更に強い設計
運用しやすい設計
は依然として重要です。
Copilot時代だからこそ、設定テーブル化のような保守設計が大きな価値を持ちます。
まとめ
設定テーブルは派手な機能ではありません。
しかし実際の運用では、
- フォルダ変更
- メール変更
- サーバ移行
- 保存先変更
などが頻繁に発生します。
その際に設定テーブル化されているシステムは圧倒的に保守が容易です。
さらにCopilotを活用することで、
- 設計支援
- VBA作成
- エラー解析
- 改善提案
を効率的に行えます。
Accessシステムを長期運用する予定がある場合は、ぜひ早い段階で設定テーブル化を導入してみてください。

コメント