Excel VBA 逆引き集 | 権限設定

Excel VBA
スポンサーリンク

権限設定の基本

Excel VBAで「ユーザーごとに操作できる範囲を制御したい」「管理者だけが特定の処理を実行できるようにしたい」といった場面では 権限設定 を組み込むと便利です。
初心者向けに、コード例やテンプレートをかみ砕いて説明します。


基本の考え方

  • 権限設定とは?
    ユーザーごとに「できること/できないこと」を制御する仕組み。
  • 用途:
    • 管理者だけがデータを編集できるようにする
    • 一般ユーザーは閲覧のみ可能にする
    • 特定の機能を制限する
  • 実装方法:
    • ユーザー名やパスワードで認証
    • 権限レベルを変数やシートに保持
    • 処理実行時に権限を判定

テンプレ1:ユーザー権限を変数で管理

Public currentRole As String

Sub SetRole()
    Dim inputPwd As String
    inputPwd = InputBox("パスワードを入力してください")
    
    If inputPwd = "admin123" Then
        currentRole = "Admin"
        MsgBox "管理者としてログインしました"
    ElseIf inputPwd = "user123" Then
        currentRole = "User"
        MsgBox "一般ユーザーとしてログインしました"
    Else
        currentRole = "Guest"
        MsgBox "権限なし(閲覧のみ)"
    End If
End Sub
VB
  • ポイント:
    • 入力パスワードで権限を判定。
    • currentRole に権限レベルを保持。

テンプレ2:権限に応じて処理を制御

Sub EditData()
    If currentRole <> "Admin" Then
        MsgBox "この処理は管理者のみ実行できます"
        Exit Sub
    End If
    
    Worksheets("Data").Range("A1").Value = "編集しました"
    MsgBox "データを編集しました"
End Sub
VB
  • ポイント:
    • If currentRole <> "Admin" で制御。
    • 管理者以外は処理を拒否。

テンプレ3:シートに権限マスタを持たせる

シート「Roles」に以下の表を用意:

ユーザー名パスワード権限
admin1234Admin
user1pass1User
guestguestGuest

UserFormで認証:

Public currentRole As String

Private Sub CommandButton1_Click()
    Dim ws As Worksheet: Set ws = Worksheets("Roles")
    Dim lastRow As Long: lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row
    
    Dim i As Long, found As Boolean
    found = False
    
    For i = 2 To lastRow
        If ws.Cells(i, 1).Value = TextBox1.Value And ws.Cells(i, 2).Value = TextBox2.Value Then
            currentRole = ws.Cells(i, 3).Value
            found = True
            Exit For
        End If
    Next i
    
    If found Then
        MsgBox "ログイン成功! 権限: " & currentRole
        Unload Me
    Else
        MsgBox "ユーザー名またはパスワードが違います"
    End If
End Sub
VB
  • ポイント:
    • シートにユーザー情報と権限を管理。
    • 認証成功時に権限を変数に保持。

テンプレ4:権限に応じてメニューを切り替える

Private Sub UserForm_Initialize()
    If currentRole = "Admin" Then
        CommandButton1.Enabled = True   ' 編集ボタン有効
        CommandButton2.Enabled = True   ' 削除ボタン有効
    ElseIf currentRole = "User" Then
        CommandButton1.Enabled = True   ' 編集のみ有効
        CommandButton2.Enabled = False  ' 削除は不可
    Else
        CommandButton1.Enabled = False
        CommandButton2.Enabled = False
    End If
End Sub
VB
  • ポイント:
    • 権限に応じてボタンの有効/無効を切り替える。
    • メニュー画面と組み合わせると便利。

例題で練習

'例1:パスワードで権限を判定
Sub Example1()
    SetRole
End Sub

'例2:管理者のみ編集可能
Sub Example2()
    EditData
End Sub

'例3:シートの権限マスタで認証
' → UserFormにコードを記述

'例4:権限に応じてメニュー切り替え
' → UserForm_Initialize にコードを記述
VB

初心者向けポイント

  • 権限は「変数」で保持するのが基本currentRole を使う。
  • シートにマスタを持たせると柔軟 → ユーザー追加が簡単。
  • 処理前に権限チェックIf currentRole <> "Admin" などで制御。
  • UIの有効/無効を切り替える → ボタンやメニューを権限に応じて制御。
  • ログイン画面と組み合わせると実用的 → 認証+権限設定で安全性アップ。

👉 この「権限設定テンプレ」を覚えておけば、Excel VBAで ユーザーごとに操作範囲を制御できる安全なアプリケーション を簡単に作成できます。

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