【Excel VBA】マクロを実行するユーザを限定する方法

Excelでマクロを実行するユーザを限定したいときはないでしょうか。

たとえば複数ユーザーで共有しているマクロ付きExcelファイルの誤操作を行わないよう制限を加えたいときなどです。

けど、そんな中で悩むことは、

・Excelでマクロを実行するユーザを限定したいが方法がよくわからない
・許可ユーザを追加/削除したいが方法がよくわからない

ですよね。

今回はそんなお悩みを解決する

・Excelでマクロを実行するユーザを限定する方法
・ログインユーザを設定する方法2選

についてまとめます!

Excelでマクロを実行するユーザを限定するイメージ

Excelでマクロを実行するユーザを限定するイメージについて説明をします。

まずは対象となるユーザーがWindowsのログインユーザーであるか、Officeのログインユーザーであるかを確認します。
今回はExcel側へログインしてるユーザーを対象としています。

次にマクロ実行を許可するユーザーのリストを作成します。

"testUserA", "testUserB", "t takahiro"

VBAで実行したいマクロとマクロ実行を許可しているユーザリストを実装します。

マクロ実行が許可されていないユーザーがマクロ実行ボタンをクリックするとメッセージが表示されます。

実行が許可されているユーザーではマクロが実行されます。

実際に使用しながら理解していきましょう!

マクロ実行を許可したいログインユーザの種類を確認する

マクロ実行を許可したいログインユーザの種類を確認しましょう。

ログインユーザの種類は大きく分けると

①WindowsなどOSにログインしているユーザ

②ExcelなどOfficeアプリケーションにログインしているユーザ

の2種類になります。

会社など組織単位でPCとOfficeを使っているユーザはライセンスの関係上①②が同一である場合が多いですが、個人ユーザや小規模組織などは①②が別のユーザである場合がありますので、①②どちらの種類のユーザに対して制御をするのか確認をしましょう。

なお、今回は②のExcelへログインしているユーザーの方で説明をします。

マクロ実行を許可したいユーザのリストを用意する

マクロ実行を許可したいユーザーのリストを用意しましょう。

メモ帳などテキストファイルを作成し、カンマ区切りでマクロ実行を許可したいユーザー名を入力していきます。

"testUserA", "testUserB", "t takahiro"

タカヒロ
タカヒロ
まずは検証のため2~3ユーザからはじめるとよいでしょう。

マクロを実行するユーザを限定するVBA

マクロを実行するユーザを限定するVBAについて説明をします。

VBAを用意する

マクロを実行するユーザを限定するVBAに各設定を加え、実装をしていきます。
VBAは以下の通りです。

Sub マクロを実行するユーザを限定する()
    Dim arrusers As Variant
    Dim strUserName As String
    
    '許可リストとなる配列を作成します。「,」区切りでユーザ名を入力してください。
    arrusers = Array("testUserA", "testUserB", "t takahiro")
    
    'Excelのユーザ情報を取得します。
    strUserName = CreateObject("Excel.Application").UserName
    
    'ユーザがリストに存在するか部分一致で検索します。
    arrResult = Filter(arrusers, strUserName)

    '検索結果の有無で、実行許可を判定します。
    If UBound(arrResult) > -1 Then
    
        If MsgBox(arrResult(UBound(arrResult)) & "は許可されたユーザです。マクロを実行しますか?", vbYesNo) = vbYes Then
        
        '↓以下に処理を追記してください。↓
        
        Else
            '確認メッセージで「No」を選択した場合のメッセージを表示させます。
            MsgBox "マクロ実行をキャンセルしました。", vbInformation
    
        End If

    Else
    '許可リストにないユーザだった場合のメッセージを表示させます。
    MsgBox "実行する権限がありません。権限付与を希望する場合は***まで連絡をしてください。", vbInformation
    End If

End Sub

VBAを設定する

VBAにマクロ実行を許可するユーザのリストを加えましょう。

arrUser = Array("testUserA", "testUserB", "t takahiro")

テキストファイルにまとめたカンマ区切りのデータを””内にコピペしていきます。

以下に許可したユーザーだけが実行できるマクロを追加します。

'↓以下に処理を追記してください。↓

これで設定は完了です。

VBAを実装する

手順については、下記

VBAの実装手順

をご参照ください。

ボタンをワークシートへ配置する

ボタンをワークシートへ配置していきましょう。

開発タブの挿入アイコンをクリックし、フォームコントロールの「ボタン」を選択します。

ボタンが挿入されたらボタンの中の表示名を適当な内容に変更します。

タカヒロ
タカヒロ
ボタンへマクロを登録する方法についてはこちらに詳細な内容をまとめていますので、どうぞご参考ください。

【Excel VBA】ボタンにマクロを登録する方法!引数の設定も!

続いて、ボタンを右クリックし、マクロの登録を選択します。
上記VBAを選択し、「OK」を押下します。

VBAを実行する

ユーザーを限定しマクロ実行するVBAを許可しているユーザーから実行してみましょう。

メッセージボックスが表示されたら「OK」を押下します。

はい、許可が通りましたね。

続いて許可されていないユーザーから実行してみます。

はい、次はメッセージが表示されマクロが実行されないことが確認できましたね。

VBAの説明

Excelのユーザ情報を取得します。

strUserName = CreateObject("Excel.Application").UserName

ユーザがリストに存在するかFilter関数の部分一致で検索します。合致していたら変数には配列の番号が挿入されます。

arrResult = Filter(arrusers, strUserName)

検索結果の有無で、実行許可を判定します。

If UBound(arrResult) > -1 Then

確認メッセージで「No」を選択した場合のメッセージを表示させます。

MsgBox "マクロ実行をキャンセルしました。", vbInformation

許可リストにないユーザだった場合のメッセージを表示させます。

MsgBox "実行する権限がありません。権限付与を希望する場合は***まで連絡をしてください。", vbInformation

Windowsへログインしているユーザーで制御する

これまではExcel側にログインしているユーザーを対象にアクセス制限を行ってきましたが、次はWindows、つまりPC側にログインしているユーザで制御をしていきたいと思います。

Windowsへログインしているユーザーを確認、抽出するプロパティは
Environ(“USERNAME”)か、CreateObject(“WScript.Network”).UserNameになります。

変更箇所は以下となります。

■変更前

'Excelのユーザ情報を取得します。
strUserName = CreateObject("Excel.Application").UserName

■変更後

Windowsのユーザ情報を取得します。
strUserName = Environ("USERNAME")

または

Windowsのユーザ情報を取得します。
strUserName = CreateObject("WScript.Network").UserName

VBAの実装手順

実装手順は以下の通りです。

Excel側にVBAを実装していきます。

①Excelを新規に開き、「開発」タブをクリックし、「VisualBasic」をクリックします。
もしくはショートカットキー「Alt」+「F11」でもOKです。

②標準モジュールを追加します。
左ペインのVBAProjectを右クリックし、「挿入」、「標準モジュール」を選択します。

③右ペインのウインドウに上記のVBAを入力します。

こちらで完了です。

VBAを実行する

では早速VBAの実行をしてみましょう。

①「開発」タブの「VBA」をクリックし実行したいマクロを選択し、「実行」をクリックします。

②処理がされたことが確認できれば完了です。

さいごに

いかがでしょうか。

今回は、

・Excelでマクロを実行するユーザを限定する方法
・ログインユーザを設定する方法2選

についてまとめました。

また、他にも便利な方法がありますので、よろしければご参照頂ければと思います。



この記事の関連キーワード

こちらの記事の関連キーワード一覧です。クリックするとキーワードに関連する記事一覧が閲覧できます。








コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です