Accessでユーザーごとにアクセス制限を設ける方法|初心者でもできる実用例つき解説

Access
スポンサーリンク

こんにちは、Accessブロガーのなかぜんです。

「このフォームは特定の人だけが開けるようにしたい…」「入力ミスや誤操作を防ぐために、ユーザーごとに機能を制限したい」──そんなお悩み、ありませんか?

実はAccessでも、ユーザーごとに使える機能や画面を制限することができます。

この記事では、Access初心者でも実務にすぐ活かせるように、VBAを使ってアクセス制限をかける方法を、具体的なコード付きでご紹介します!


スポンサーリンク

ユーザー別アクセス制限ってどんなもの?

たとえば、こんな場面で使える!

  • 一般社員は「閲覧のみ」、管理者だけ「編集・削除可」
  • 特定の部署の人だけ、特定のフォームを使用可能に
  • ログインユーザーに応じてボタンの表示を切り替える

これができると、誤操作やセキュリティリスクを大幅に軽減できますし、業務の信頼性もアップしますよ。


基本の考え方:ユーザー名で制御しよう

1. 起動時にユーザーを識別する仕組みを作る

Accessでは、ログインユーザー名を取得して、それに応じて処理を分岐させるのが一般的です。以下のようなVBAで取得できます。

' Windowsログインユーザー名を取得
Public Function GetUserName() As String
    GetUserName = Environ("Username")
End Function

この関数を使って、起動時やフォームロード時にユーザー名を取得し、それに応じて機能を制御していきます。


実践!フォームの表示制御コード

2. 管理者のみボタンを表示する例

たとえば、「btnDelete」という削除ボタンを、管理者だけに表示するコードは以下のようになります。

Private Sub Form_Load()
    Dim userName As String
    userName = GetUserName()

    ' 管理者ユーザーの例:nakano, yamada
    If userName = "nakano" Or userName = "yamada" Then
        Me.btnDelete.Visible = True
    Else
        Me.btnDelete.Visible = False
    End If
End Sub

これだけで、指定ユーザー以外にはボタンが非表示になります!


データベース内にユーザー情報を管理する方法

3. ユーザーマスタテーブルを作成して制御

Access内に「T_ユーザー権限」テーブルを作り、ユーザー名と権限レベルを登録しておくことで、柔軟な制御ができます。

テーブル名:T_ユーザー権限
フィールド:
・ユーザー名(UserName)
・権限区分(Role:例「管理者」「一般」など)

この情報をもとに、フォームロード時にDLookup関数で権限を取得するコードはこちら:

Private Sub Form_Load()
    Dim userName As String
    Dim userRole As String

    userName = GetUserName()
    userRole = Nz(DLookup("Role", "T_ユーザー権限", "UserName='" & userName & "'"), "")

    If userRole = "管理者" Then
        Me.btnDelete.Visible = True
    Else
        Me.btnDelete.Visible = False
    End If
End Sub

管理者ユーザーの追加や変更もテーブル操作だけで済むので、拡張性が高くおすすめです。


よくあるミスと注意点

  • ユーザー名の大文字・小文字の違いに注意(基本はEnviron関数で取得した値と同じに)
  • 削除ボタンが初期状態で表示されていると意味がないので、プロパティで「Visible=False」に設定しておく
  • 「権限が空白」の場合の処理も忘れずに(エラー回避)

中級者向け応用ポイント

・メニュー制御と連動させる

ナビゲーションフォームやスイッチボードを使っている場合は、ユーザー権限に応じてボタンやリンクの「Enabled」や「Visible」を切り替えましょう。

・フォームの読み取り専用設定

If userRole = "一般" Then
    Me.AllowEdits = False
    Me.AllowAdditions = False
    Me.AllowDeletions = False
End If

これで編集をブロックすることもできます。


まとめ:まずは1画面から始めてみよう

Accessでユーザーごとのアクセス制限をかける方法、いかがでしたか?

  • Environ関数でユーザー名を取得
  • 権限に応じてボタンやフォームを制御
  • テーブルで権限管理すると柔軟に対応可能

最初は難しそうに感じるかもしれませんが、1つのボタン制御からでも試してみるのがコツです。

それでは、またお会いしましょう~。

楽天ブックス
¥2,420 (2025/05/27 13:34時点 | 楽天市場調べ)