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"
マクロを実行するユーザを限定する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を選択し、「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」をクリックし実行したいマクロを選択し、「実行」をクリックします。
②処理がされたことが確認できれば完了です。
さいごに
いかがでしょうか。
今回は、
・ログインユーザを設定する方法2選
についてまとめました。
また、他にも便利な方法がありますので、よろしければご参照頂ければと思います。
コメントを残す