Access VBAを覚え始めた頃は「とりあえず動けばよい」と考えがちですが、システム運用が始まると状況は変わります。
実は、Access開発の品質を左右するのは難しいアルゴリズムではなく、日々のVBAの書き方です。
- エラーに強い
- 読みやすい
- 修正しやすい
- 処理速度が速い
VBAを書くためには、ベテラン開発者が当たり前のように使っているテクニックを身につけることが重要です。
今回は実務で効果が高いVBA記述テクニックを紹介します。
- Option Explicit は必ず使用する
- 変数名で型を分かりやすくする
- マジックナンバーをなくす
- 長い処理は関数化する
- Exit Sub を活用する
- Null対策を徹底する
- エラー処理を実装する
- Debug.Print を使う
- SQLは変数へ格納する
- Withを活用する
- DoEvents の使い過ぎに注意する
- レコードセットは必ず解放する
- Select Case を活用する
- コメントは「なぜ」を書く
- 共通処理は標準モジュールへ移動する
- 実務活用例① CSV取込システム
- 実務活用例② 設備管理システム
- 実務活用例③ ログ管理
- Copilot活用術① VBAレビュー依頼
- Copilot活用術② リファクタリング依頼
- Copilot活用術③ エラー処理追加
- Copilot活用術④ ベテラン視点レビュー
- 本当に重要な3つの習慣
- まとめ
Option Explicit は必ず使用する
最も重要なテクニックです。
標準モジュールやフォームモジュールの先頭に必ず記述します。
Option Compare Database
Option Explicit
例えば
Dim lngCount As Long
lngCnt = 100
と入力しても、
変数名の誤り
を検出できます。
誤字によるバグを防ぐため必須です。
変数名で型を分かりやすくする
初心者
Dim A
Dim B
Dim C
おすすめ
Dim lngCount As Long
Dim strFileName As String
Dim dblValue As Double
Dim dtmWorkDate As Date
変数の役割が一目で分かります。
保守性が大きく向上します。
マジックナンバーをなくす
悪い例
If Me!測定値 > 10 Then
良い例
Const LIMIT_VALUE As Double = 10
If Me!測定値 > LIMIT_VALUE Then
修正が容易になります。
長い処理は関数化する
悪い例
Private Sub cmd実行_Click()
'200行のコード
End Sub
良い例
Private Sub cmd実行_Click()
Call ImportCsv
End Sub
Private Sub ImportCsv()
'CSV取込
End Sub
処理単位で分けましょう。
Exit Sub を活用する
ネストを減らします。
悪い例
If Not IsNull(Me!設備番号) Then
If Me!設備番号 <> "" Then
処理
End If
End If
良い例
If Nz(Me!設備番号, "") = "" Then Exit Sub
処理
読みやすくなります。
Null対策を徹底する
Access開発では必須です。
悪い例
If Me!数量 > 0 Then
良い例
If Nz(Me!数量,0) > 0 Then
エラー防止になります。
エラー処理を実装する
業務システムでは必須です。
On Error GoTo ErrHandler
処理
Exit Sub
ErrHandler:
MsgBox Err.Number & vbCrLf & _
Err.Description
運用後のトラブル調査が容易になります。
Debug.Print を使う
ベテランほど利用しています。
Debug.Print strFileName
Debug.Print lngCount
イミディエイトウィンドウで確認できます。
MsgBoxより効率的です。
SQLは変数へ格納する
悪い例
CurrentDb.Execute _
"UPDATE T_TEST SET ..."
良い例
Dim strSQL As String
strSQL = _
"UPDATE T_TEST " & _
"SET 数量 = 100"
CurrentDb.Execute strSQL
デバッグしやすくなります。
Withを活用する
同じオブジェクトを繰り返し参照する場合です。
悪い例
Me!txtName.Visible = True
Me!txtName.Enabled = True
Me!txtName.Back
良い例
With Me!txtName
.Visible = True
.Enabled = True
.BackColor = vbYellow
End With
読みやすくなります。
DoEvents の使い過ぎに注意する
初心者が多用しがちです。
DoEvents
便利ですが、
- 処理遅延
- 予期せぬイベント発生
の原因になります。
必要な場面だけ使用しましょう。
レコードセットは必ず解放する
忘れやすいポイントです。
rs.Close
Set rs = Nothing
リソースリーク防止になります。
Select Case を活用する
悪い例
If 状態 = 1 Then
ElseIf 状態 = 2 Then
ElseIf 状態 = 3 Then
良い例
Select Case 状態
Case 1
Case 2
Case 3
End Select
可読性が向上します。
コメントは「なぜ」を書く
初心者
‘ループ処理
ベテラン
‘CSV取込済データの重複登録防止
処理内容ではなく目的を書く方が有効です。
共通処理は標準モジュールへ移動する
例えば
GetFiscalYear()
GetMonthEnd()
WriteLog()
などです。
複数フォームで再利用できます。
実務活用例① CSV取込システム
おすすめ構成
ImportCsv()
ValidateCsv()
WriteImportLog()
処理を分割します。
保守が容易になります。
実務活用例② 設備管理システム
共通関数
GetEquipmentNo()
CheckEquipment()
WriteHistory()
モジュール化すると再利用性が向上します。
実務活用例③ ログ管理
共通ログ関数です。
Call WriteLog( _
"CSV取込", _
strFileName)
全システムで利用可能になります。
Copilot活用術① VBAレビュー依頼
完成したコードを渡します。
Access VBAです。
このコードをレビューしてください。
保守性
実行速度
バグの可能性
を指摘してください。
非常に有効です。
Copilot活用術② リファクタリング依頼
この100行のコードを
関数化
コメント追加
変数名改善
してください。
品質向上に役立ちます。
Copilot活用術③ エラー処理追加
このコードへ
On Error GoTo
を利用したエラー処理を
追加してください。
標準的な構造を作成できます。
Copilot活用術④ ベテラン視点レビュー
おすすめの依頼です。
Access VBAです。
もしあなたが保守担当者なら
このコードのどこを
最初に修正しますか。
理由も説明してください。
単なる文法ではなく運用視点の指摘を受けられます。
本当に重要な3つの習慣
Access開発歴が長い人ほど次の3つを徹底しています。
① Option Explicit
② Null対策
③ エラー処理
この3つだけでも障害発生率は大きく下がります。
まとめ
Access VBAは「動けばよい」から「保守できる」へ考え方を変えることが重要です。
特に実務で効果が高いのは、
- Option Explicit
- 意味のある変数名
- 関数化
- Null対策
- エラー処理
- Debug.Print
- Select Case
- 標準モジュール化
です。
また最近はCopilotを活用することで、
- コードレビュー
- リファクタリング
- エラー解析
- 設計レビュー
も効率よく実施できます。
VBAの技術力を高める近道は難しい関数を覚えることではなく、「読みやすく保守しやすいコードを書く習慣」を身につけることです。


コメント