PR

Access VBA逆引き集|Select CaseとEnumを組み合わせて保守性を劇的に向上させる実践テクニックとCopilot活用術

VBA

Access VBAでシステム開発を続けていると、

  • ステータス管理が複雑になってきた
  • If文だらけで読みにくい
  • 数字の意味が分からなくなった
  • 保守担当者が理解できない
  • 同じ条件分岐が複数箇所に存在する

といった課題が発生します。

業務システムの状態管理には「Enum+Select Case」の組み合わせが最もおすすめです。

実際に長期間運用されるシステムでは、

  • 受注管理
  • 設備管理
  • CSV取込
  • 承認ワークフロー
  • 点検管理

などで頻繁に利用されています。

Copilotが生成するコードも、この構成で作ることで格段に分かりやすくなります。


スポンサーリンク

なぜIf文だけでは限界が来るのか

初心者がよく書くコードです。

If lngStatus = 1 Then

    MsgBox "受付"

ElseIf lngStatus = 2 Then

    MsgBox "処理中"

ElseIf lngStatus = 3 Then

    MsgBox "完了"

End If

問題点

1は何?

2は何?

3は何?

が分からないことです。


Enumを利用する

まずは状態を定義します。

Public Enum OrderStatus

    enmReception = 1

    enmProcessing = 2

    enmComplete = 3

End Enum

すると

lngStatus = enmProcessing

のように書けます。


メリット

意味が分かる

レビューしやすい

保守しやすい

になります。


Select Caseと組み合わせる

条件分岐です。

Select Case lngStatus

Case enmReception

    MsgBox "受付"

Case enmProcessing

    MsgBox "処理中"

Case enmComplete

    MsgBox "完了"

End Select

効果

非常に読みやすくなります。


逆引き① 受注ステータスを管理したい

受注システムの定番です。

Enum

Public Enum OrderStatus

    enmOrder = 1

    enmShipping = 2

    enmCompleted = 3

End Enum

分岐

Select Case lngStatus

Case enmOrder

    MsgBox "受注"

Case enmShipping

    MsgBox "出荷"

Case enmCompleted

    MsgBox "完了"

End Select

逆引き② CSV取込結果を管理したい

実務でよく利用します。

Enum

Public Enum ImportStatus

    enmSuccess = 1

    enmWarning = 2

    enmError = 3

End Enum

利用

Select Case lngResult

Case enmSuccess

Case enmWarning

Case enmError

End Select

逆引き③ 設備状態を管理したい

設備管理システムです。

Enum

Public Enum MachineStatus

    enmNormal = 1

    enmAttention = 2

    enmAbnormal = 3

End Enum

判定

Select Case lngStatus

Case enmNormal

Case enmAttention

Case enmAbnormal

End Select

逆引き④ ログレベルを管理したい

ログシステムです。

Public Enum LogLevel

    enmInfo = 1

    enmWarn = 2

    enmError = 3

End Enum

分岐

Select Case lngLevel

Case enmInfo

Case enmWarn

Case enmError

End Select

逆引き⑤ 権限管理をしたい

利用者権限です。

Public Enum UserRole

    enmGuest = 1

    enmUser = 2

    enmAdmin = 3

End Enum

Select Case lngRole

Case enmGuest

Case enmUser

Case enmAdmin

End Select

実務活用例① 顧客管理システム

顧客区分です。

Public Enum CustomerType

    enmNormal = 1

    enmVip = 2

    enmBlack = 3

End Enum

メリット

区分管理が明確になります。


実務活用例② 設備管理システム

点検判定です。

Public Enum CheckResult

    enmOK = 1

    enmNG = 2

    enmHold = 3

End Enum

効果

判定ミス防止


実務活用例③ 測定管理システム

測定結果管理です。

Public Enum Result

    enmSafe = 1

    enmWarning = 2

    enmOver = 3

End Enum

判定

Select Case lngResult

Case enmSafe

Case enmWarning

Case enmOver

End Select

効果

判定ロジックの明確化


実務活用例④ バッチ処理

実行ステータスです。

Public Enum BatchStatus

    enmWaiting = 1

    enmRunning = 2

    enmFinished = 3

    enmError = 9

End Enum

活用

運用監視がしやすくなります。


実務活用例⑤ ワークフロー管理

承認フローです。

Public Enum ApprovalStatus

    enmDraft = 1

    enmRequest = 2

    enmApproved = 3

    enmReject = 9

End Enum

効果

ワークフローの保守性向上


マジックナンバーをなくせる

悪い例です。

If lngStatus = 3 Then

良い例です。

If lngStatus = enmComplete Then

効果

コードの意味が理解しやすくなります。


ベテラン開発者の定番構成

標準モジュールです。

Option Explicit

Public Enum ProcessStatus

    enmStart = 1

    enmRunning = 2

    enmComplete = 3

    enmError = 9

End Enum

利用側です。

Select Case lngStatus

Case enmStart

Case enmRunning

Case enmComplete

Case enmError

End Select

非常に保守しやすい構成になります。


Case Elseを忘れない

重要なポイントです。

Select Case lngStatus

Case enmStart

Case enmRunning

Case enmComplete

Case Else

    MsgBox "定義外状態"

End Select

効果

障害調査が容易になります。


Copilot活用術① Enum生成

Copilotへの依頼例です。

Access VBAです。

設備管理システム向けの

Enum定義を作成してください。


Copilot活用術② Select Case生成

以下のEnumに対応した

Select Case文を

作成してください。


Copilot活用術③ マジックナンバー改善

このコードの

マジックナンバーを

Enumへ変更してください。


Enum+Select Caseが向いている処理

特に活躍するのは次の用途です。

  • 受注管理
  • 顧客区分管理
  • 設備管理
  • 測定管理
  • CSV取込結果管理
  • ワークフロー管理
  • バッチ処理管理

開発現場での利用頻度

順位用途
1位ステータス管理
2位ワークフロー管理
3位設備状態管理
4位CSV取込結果管理
5位ログレベル管理

中規模以上のAccessシステムでは非常によく利用されます。


まとめ

EnumとSelect Caseの組み合わせは、Access VBAの保守性を大きく向上させる実践的なテクニックです。

特に、

  • ステータス管理
  • 設備管理
  • 測定管理
  • ワークフロー管理
  • CSV取込結果管理

などで大きな効果を発揮します。

まずは次の形を覚えましょう。

Public Enum StatusType

    enmStart = 1

    enmComplete = 2

End Enum

そして、

Select Case lngStatus

と組み合わせることで、読みやすく保守しやすいコードが実現できます。

Copilotを活用すれば、

  • Enum設計
  • 分岐処理生成
  • マジックナンバー削減

も効率よく進められます。

Access VBAで長く使われる業務システムを開発するなら、ぜひ習得しておきたい設計テクニックです。

あなたの会社は大丈夫ですか?

以下に1つでも当てはまる場合は注意が必要です。

  • Accessの担当者が1人しかいない
  • VBAの内容を説明できる人がいない
  • 設計書が存在しない
  • 10年以上改修していない
  • エラー発生時に相談先がない
  • 担当者が50代以上である
  • 後任が決まっていない

2つ以上該当する場合、

システムそのものではなく

保守体制

がリスクになっている可能性があります。


こんなご相談が増えています

  • 担当者が退職してしまった
  • エラーが発生したが原因が分からない
  • VBAを解析してほしい
  • Accessを継続利用できるか判断してほしい
  • Power Appsへ移行すべきか相談したい

お困りの際はお気軽にご相談ください。

☞ 業務依頼・お問い合わせはこちら

コメント

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