Access VBAで業務システムを開発していると、
- ステータス管理が分かりにくい
- 数値の意味が分からなくなる
- マジックナンバーが増える
- 保守担当者が困る
- Copilotが生成したコードの意味が読み取りにくい
といった問題が発生します。
Enum(列挙型)を活用することでコードの可読性と保守性を大幅に向上できます。
特に受注管理、設備管理、ワークフロー管理など、状態管理を行うシステムでは絶大な効果があります。実際に長期運用される業務システムほどEnumが活用されています。
- Enum(列挙型)とは
- なぜEnumが重要なのか
- Enumを利用した場合
- 基本構文
- 逆引き① ステータス管理したい
- 逆引き② Select Caseと組み合わせたい
- 逆引き③ エラー区分を管理したい
- 逆引き④ ログレベルを定義したい
- 逆引き⑤ 設備状態を管理したい
- マジックナンバーをなくす
- 実務活用例① 受注管理システム
- 実務活用例② CSV取込システム
- 実務活用例③ 設備管理システム
- 実務活用例④ ログ出力
- 実務活用例⑤ 権限管理
- EnumとConstの違い
- Select Caseとの相性が抜群
- ベテラン開発者の定番パターン
- Copilot活用術① Enum生成
- Copilot活用術② マジックナンバー変換
- Copilot活用術③ コードレビュー
- Enum利用時の注意点
- 開発現場での利用頻度
- Enumを覚えるメリット
- まとめ
Enum(列挙型)とは
Enumは数値に名前を付ける機能です。
例えば、
1 = 受付
2 = 処理中
3 = 完了
と定義できます。
なぜEnumが重要なのか
初心者が書きがちなコードです。
If lngStatus = 3 Then
MsgBox "完了"
End If
問題点
3の意味が分からない
ことです。
Enumを利用した場合
If lngStatus = enmComplete Then
MsgBox "完了"
End If
意味がすぐ分かります。
基本構文
Public Enum StatusType
enmReception = 1
enmProcessing = 2
enmComplete = 3
End Enum
標準モジュールへ記述します。
逆引き① ステータス管理したい
最も利用頻度が高い例です。
Public Enum OrderStatus
enmOrder = 1
enmShipping = 2
enmComplete = 3
End Enum
利用
lngStatus = enmShipping
逆引き② Select Caseと組み合わせたい
実務で定番です。
Select Case lngStatus
Case enmOrder
MsgBox "受付"
Case enmShipping
MsgBox "出荷"
Case enmComplete
MsgBox "完了"
End Select
効果
とても読みやすくなります。
逆引き③ エラー区分を管理したい
エラーハンドリングです。
Public Enum ErrorType
enmFileNotFound = 1
enmDataError = 2
enmDbError = 3
End Enum
利用
If lngError = enmDbError Then
End If
逆引き④ ログレベルを定義したい
ログ管理です。
Public Enum LogLevel
enmInfo = 1
enmWarning = 2
enmError = 3
End Enum
逆引き⑤ 設備状態を管理したい
設備管理システムです。
Public Enum EquipmentStatus
enmNormal = 1
enmAttention = 2
enmAbnormal = 3
End Enum
利用
If lngStatus = enmAbnormal Then
End If
マジックナンバーをなくす
保守改善の代表例です。
悪い例
If lngLevel = 2 Then
良い例
If lngLevel = enmWarning Then
効果
意味が分かる
修正しやすい
レビューしやすい
となります。
実務活用例① 受注管理システム
状態管理です。
Public Enum OrderStatus
enmAccept = 1
enmPicking = 2
enmShipping = 3
enmComplete = 4
End Enum
利点
処理フローが明確になります。
実務活用例② CSV取込システム
取込結果管理です。
Public Enum ImportResult
enmSuccess = 1
enmWarning = 2
enmError = 3
End Enum
判定
If lngResult = enmError Then
End If
実務活用例③ 設備管理システム
点検結果管理です。
Public Enum CheckResult
enmOK = 1
enmNG = 2
enmHold = 3
End Enum
効果
誤判定を減らせます。
実務活用例④ ログ出力
ログ分類です。
Public Enum LogType
enmInfo = 1
enmWarning = 2
enmError = 3
End Enum
出力
Call WriteLog(enmError)
実務活用例⑤ 権限管理
利用者管理です。
Public Enum UserRole
enmGuest = 1
enmUser = 2
enmAdmin = 3
End Enum
判定
If lngRole = enmAdmin Then
End If
EnumとConstの違い
初心者が迷うポイントです。
Const
Public Const STATUS_COMPLETE = 3
Enum
Public Enum StatusType
enmComplete = 3
End Enum
おすすめ
状態管理はEnumの方が管理しやすいです。
Select Caseとの相性が抜群
例えば、
Select Case lngStatus
Case enmReception
Case enmProcessing
Case enmComplete
End Select
非常に読みやすくなります。
ベテラン開発者の定番パターン
よく見かける構成です。
Option Explicit
Public Enum ProcessStatus
enmStart = 1
enmRunning = 2
enmComplete = 3
enmError = 9
End Enum
標準モジュールへまとめます。
Copilot活用術① Enum生成
Copilotへの依頼例です。
Access VBAです。
受注管理システム用の
Enumを作成してください。
Copilot活用術② マジックナンバー変換
以下のVBAコードにある
マジックナンバーを
Enumへ変換してください。
Copilot活用術③ コードレビュー
Enumの定義です。
改善案を教えてください。
保守性向上に役立ちます。
Enum利用時の注意点
名前の重複
同じEnum名は使用できません。
命名ルールを統一する
おすすめです。
enm
プレフィックスを付けます。
状態追加を考慮する
途中追加を想定して設計しましょう。
開発現場での利用頻度
| 順位 | 用途 |
|---|---|
| 1位 | ステータス管理 |
| 2位 | 権限管理 |
| 3位 | ログ管理 |
| 4位 | 設備状態管理 |
| 5位 | CSV取込結果管理 |
中規模以上のシステムでは頻繁に利用します。
Enumを覚えるメリット
次の効果があります。
- コードが読みやすい
- 保守しやすい
- バグを減らせる
- Copilotのレビュー精度向上
- チーム開発しやすい
特に長期運用システムで威力を発揮します。
まとめ
Enum(列挙型)はAccess VBA開発において保守性を向上させる非常に有効なテクニックです。
特に
- ステータス管理
- CSV取込結果管理
- 設備管理
- 権限管理
- ログ管理
などで大きな効果があります。
またCopilotを活用することで、
- Enum生成
- マジックナンバー削減
- コードレビュー
も効率良く行えます。
派手な機能ではありませんが、ベテラン開発者ほど活用している実践的なテクニックです。Access VBA開発者ならぜひ習得しておきましょう。


コメント