「……え、嘘でしょ。なんで動かないの?」
朝一番、意気揚々と業務を始めようとしたとき目に飛び込んできたのは、無情なエラーメッセージ。昨日まで完璧に動いていた自慢のマクロが、誰かの手によって「改造」され、無残な姿に……。
「触らないでって言ったのに!」と心の中で叫びたくなりますよね。
実は、Excelシートの保護だけでは、マクロ(VBA)の中身まで守ることはできません。
マクロは、いわば「コンピューターへの命令書」です。この命令書を誰でも書き換えられる状態にしておくのは、鍵をかけずに金庫を置いているような状態になります。誰でも触れる環境は、常にリスクと隣り合わせです。
そこで今回は、大切な努力の結晶であるコードを守り、「修正に追われる無駄な時間」を削減するための、もっとも簡単な防御策をご紹介します。
たった3ステップ!VBAにパスワードをかける手順
専門用語を使わずに言うと、「命令書の入った引き出しにカギをかける」作業です。
- VBE(コードを書く画面)を開く
Excelで Alt + F11 を押します。 - プロパティを開く
画面上部のメニューから「ツール」→「VBAProjectのプロパティ」をクリックします。 - パスワードを設定する
「保護」タブを開き、「プロジェクトを表示用にロックする」にチェックを入れ、パスワードを入力して「OK」を押すだけ!
これで、Excelを一度保存して閉じれば、次に開くときにはパスワードがないと中身が見られなくなります。

【コピペOK】さらに安心!「誰がいつ開いたか」を記録するコード
パスワードで守るだけでなく、「いつ、誰がこのファイルを使ったか」を自動で記録しておくことも可能です。現場の抑止力にもなりますし、トラブル時の原因究明もスムーズになります。
以下のコードをThisWorkbookという場所に貼り付けてみてください。
' ワークブックを開いたときに自動で実行される命令
Private Sub Workbook_Open()
Dim ws As Worksheet
Dim lastRow As Long
' 「ログ」という名前のシートに記録する場合(シートは隠しておくと◎)
On Error Resume Next ' ログシートがなくてもエラーで止めないおまじない
Set ws = ThisWorkbook.Sheets("ログ")
On Error GoTo 0
If Not ws Is Nothing Then
' 最終行を見つけて、次の行にユーザー名と時間を書き込む
lastRow = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row + 1
ws.Cells(lastRow, 1).Value = Now ' 今の時間
ws.Cells(lastRow, 2).Value = Environ("UserName") ' PCのユーザー名
End If
End Sub
まとめ:パスワードをかける時の「小さな注意点」
ここで私の失敗談を一つ。パスワードをかけたのは良いものの、そのパスワード自体を忘れてしまい、私自身も直せなくなったことがあります…。
- パスワードは必ずメモしておく(付箋ではなく、パスワード管理ソフトなどで)。
- バックアップを取ってから鍵をかける
かつての私のように困ってしまわないよう、事前準備を整えておくと安心です。
コードを保護することは、意地悪で隠すことではありません。「誰が使っても同じ結果が出る状態(再現性)」を維持するために重要なプロセスとなります。
勝手に書き換えられる心配がなくなれば、みんな安心して次の効率化ツールを作ることに集中できます。ぜひ試してみてください。
VBAを独学で学び、業務自動化に5年以上携わってきた私が、「本当に実務で役立った!」と感じた2冊を紹介します。 もう本選びで失敗したくない方は、よければ参考にしてみてください。

コメント