スポンサーリンク

Accessでの状態管理:フラグ管理設計パターン

スポンサーリンク
Access
スポンサーリンク

こんにちは、なかぜんです。

業務システムをAccessで作っていると、「このデータ、今どんな状態?」「処理済かどうかをどう管理する?」といった“状態管理”の悩みにぶつかること、ありませんか?

そんなときに役立つのが「フラグ管理」の設計パターンです。今回は、上級者向けにしっかりと、でもわかりやすく解説していきますね。

スポンサーリンク

フラグ管理とは?なぜ必要?

業務でよくある「状態管理」

Accessでは、データの「状態」を把握して処理を分岐させたり、表示を制御したりする場面が多くあります。たとえば、

  • 請求済みかどうか
  • 削除済み(論理削除)かどうか
  • 承認されたかどうか

こうした情報を効率的に管理するために、「フラグ(Flag)」という項目をテーブルに設けるのが一般的です。

シンプルな構成と運用のしやすさ

フラグを使えば、1つのフィールドで複数の状態を明確に管理できます。たとえば「0=未処理、1=処理済」のように、値と状態を対応させます。

これにより、クエリやVBAでの処理もシンプルになり、業務ロジックを明確に保つことができるのです。

基本の設計パターン

単一状態フラグ(Yes/No型または数値型)

まずはシンプルな例から。

' 例:納品済みフラグの更新
CurrentDb.Execute "UPDATE T_受注 SET 納品済フラグ = True WHERE 受注ID = 1001"

解説:このコードは、受注IDが1001のデータに対して「納品済み」とフラグを立てる処理です。Yes/No型の「納品済フラグ」を使っています。

複数状態を管理する場合(状態コード型)

状態が2つ以上ある場合は、「数値型」で管理し、マスタテーブルと組み合わせて使うのがおすすめです。

' 状態コード(例:0=未処理, 1=承認待ち, 2=承認済み)
CurrentDb.Execute "UPDATE T_申請 SET 状態コード = 2 WHERE 申請ID = 500"

マスタテーブル「M_状態」などとリレーションを組んでおけば、フォーム上での表示もわかりやすくなります。

画面イメージと制御例

フォーム上でボタンの表示を切り替える

' 状態に応じてボタンの可視性を切り替える例
Private Sub Form_Current()
    Select Case Me!状態コード
        Case 0 ' 未処理
            Me!btn承認.Enabled = True
        Case Else
            Me!btn承認.Enabled = False
    End Select
End Sub

解説:フォームの現在レコードが未処理の場合のみ「承認ボタン」を有効にする制御です。業務ルールの明確化にもつながります。

注意点とよくあるミス

  • フラグが増えすぎて「状態の意味」が分かりづらくなる
  • フラグ値に意味がない(True/Falseだけで処理分岐できない)
  • マスタと連携していないため、表示が固定的

フラグは便利ですが、「使いすぎ」「意味を込めすぎ」には注意。ルールを明文化して、マスタ連携とセットで考えるのがコツです。

応用ポイント

状態変更ログの自動記録

VBAでフラグを更新するたびに、「状態履歴」テーブルにログを残す設計もおすすめです。

Sub UpdateStatusWithLog(申請ID As Long, 新状態 As Integer)
    Dim SQL1 As String, SQL2 As String
    SQL1 = "UPDATE T_申請 SET 状態コード = " & 新状態 & " WHERE 申請ID = " & 申請ID
    SQL2 = "INSERT INTO T_状態履歴 (申請ID, 状態コード, 変更日時) VALUES (" & 申請ID & "," & 新状態 & ", Now())"
    CurrentDb.Execute SQL1
    CurrentDb.Execute SQL2
End Sub

解説:状態を変えた記録を自動で別テーブルに残すことで、「誰がいつ変更したか?」のトレースが可能になります。

複数条件での表示制御

フラグに加えて「ユーザー権限」や「担当部署」なども組み合わせて、柔軟なアクセス制御が可能になります。

まとめ:状態管理の第一歩は「意味あるフラグ」から

今回は、Access上級者の方向けに「状態管理のフラグ設計パターン」について紹介しました。

  • フラグは「状態を明確に表す」ための便利な仕組み
  • Yes/No型や状態コード型を使い分けよう
  • マスタ連携・履歴ログとの組み合わせで強力に!

「うちのシステム、処理状況が分かりにくいんだよな…」と思ったら、まずはフラグの設計から見直してみてください。

それではまた、なかぜんでした!