こんにちは、なかぜんです。
業務でAccessを長年使っていると、「作ったはいいけど後から直すのが大変…」という経験、ありますよね。
特にVBAコードは、一度書いたら放置しがち。数か月後に自分や別の人が修正する時、「何を書いてあるのか全く分からない」という状況になりやすいです。
今回は、そんな悩みを解消するためのメンテナンス性の高いAccessコードを書くコツを、実際のコード例とともにご紹介します。
1. なぜメンテナンス性が重要なのか
Accessは社内業務の自動化やデータ管理に便利ですが、作ったアプリは長期間使われることが多く、担当者交代や仕様変更も日常茶飯事です。
メンテナンス性が低いコードは、将来の改修時に大きなコストを発生させます。逆に、最初から保守しやすい設計をしておくと、トラブル時の復旧が早く、機能追加もスムーズです。
2. コードを分かりやすく保つ基本原則
2-1. 命名規則を統一する
変数や関数名は「役割+型ヒント」で統一しましょう。例えば:
' 良い例
Dim lngTotalCount As Long
Dim strCustomerName As String
' 悪い例(後から見ても用途がわからない)
Dim a As Long
Dim b As String
命名規則をチーム全員で共有しておくと、後任が見ても迷いません。
2-2. コメントを適切に入れる
コメントは「なぜその処理をしているか」を書くことがポイントです。
' 顧客一覧フォームを開く(ユーザーが最新データを見られるようにするため)
DoCmd.OpenForm "frmCustomerList", acNormal
処理の内容だけでなく、背景や目的も書くと理解が早まります。
2-3. 関数は短く保つ
1つの関数に多くの処理を詰め込むと、バグ発見が困難になります。
目安としては1関数=1つの役割に絞ることをおすすめします。
3. 実践的なコード例
例えば、売上データを集計してメッセージ表示する処理を考えます。
' 売上集計と表示(メンテナンス性を意識した書き方)
Public Sub ShowSalesSummary()
Dim lngTotalSales As Long
lngTotalSales = GetTotalSales(DateSerial(Year(Date), Month(Date), 1), Date)
MsgBox "今月の売上合計は " & Format(lngTotalSales, "#,##0") & " 円です。", vbInformation
End Sub
' 売上合計を取得する関数
Private Function GetTotalSales(ByVal dtStart As Date, ByVal dtEnd As Date) As Long
Dim db As DAO.Database
Dim rs As DAO.Recordset
Dim lngSum As Long
Set db = CurrentDb
Set rs = db.OpenRecordset( _
"SELECT SUM(SalesAmount) AS TotalAmt " & _
"FROM T_Sales " & _
"WHERE SaleDate BETWEEN #" & Format(dtStart, "yyyy/mm/dd") & "# AND #" & Format(dtEnd, "yyyy/mm/dd") & "#", _
dbOpenSnapshot)
If Not rs.EOF Then
lngSum = Nz(rs!TotalAmt, 0)
End If
rs.Close
Set rs = Nothing
Set db = Nothing
GetTotalSales = lngSum
End Function
解説:
・集計処理(GetTotalSales)と表示処理(ShowSalesSummary)を分離することで、表示形式の変更があっても集計ロジックを修正する必要がなくなります。
・変数名や関数名で役割が一目でわかります。
4. よくあるミスと注意点
- 変数のスコープを無駄に広く取る(グローバル変数多用)
- Option Explicitを使わず、スペルミスがエラーにならない
- コメントが古くなっていて実際の処理と違う
- SQL文をコードにベタ書きしすぎて可読性が下がる
5. 応用ポイント
5-1. モジュールの役割ごとに分ける
データ取得用、フォーム制御用、ユーティリティ用…というようにモジュールを分類すると探しやすくなります。
5-2. 定数化で変更に強くする
ファイルパスやSQLの条件など、変更がありそうな部分はConstでまとめておきます。
Public Const EXPORT_PATH As String = "C:\Export\"
5-3. ログ機能を組み込む
運用中の不具合調査が格段に楽になります。
ログ出力専用の関数を用意し、重要な処理の前後で呼び出すと良いです。
6. まとめ
今回は、メンテナンス性の高いAccessコードを書くためのコツをお伝えしました。
- 命名規則・コメント・関数の分離で読みやすくする
- Option Explicitや定数化でエラー防止と変更対応を楽にする
- モジュール分割やログで運用・改修の効率を上げる
「数か月後の自分や、まだ見ぬ後任が笑顔になれるコード」を意識して書くと、自然とメンテナンス性は高まります。
