こんにちは!Excel VBAの世界へようこそ。いつも業務効率化のために一歩ずつ進んでいるあなたを、心から応援しています。
マクロの記録を卒業し、自分でコードが書けるようになってくると、次にやりたくなるのが「作ったマクロを職場のメンバーに配って使ってもらうこと」ですよね。
しかし、意気揚々と配布したファイルを開いた同僚から、こんな風に言われたことはありませんか?
> 「なんか『セキュリティの警告』って黄色いバーが出て、マクロが動かないんだけど……」
> 「『すべてのマクロを有効にする』に設定変更すればいいの?」
ここで「あ、じゃあExcelのセキュリティ設定を一番低い『すべてのマクロを有効にする(推奨しません)』に変えておいて!」と指示してしまうのは、絶対にNGです。これは、泥棒に対して「我が家の鍵は常に開けておくので、いつでもどうぞ」と言っているのと同じくらい危険な行為だからです。
今回は、セキュリティの壁を無理やり破壊(設定変更)するのではなく、「デジタル署名」という技術を使って、スマートかつ安全に社内配布を行うプロの標準手順を分かりやすく解説します。
ここをクリアすれば、あなたの作ったマクロは「怪しいプログラム」から「社内で公認された安全なツール」へと昇華します。Excel VBAの基本と運用の極意を、一緒にマスターしていきましょう!
—
1. なぜマクロを開くときに「警告」が出るのか?
Excelには、悪意のあるマクロ(ウイルスなど)からPCを守るための強力な防衛システムが備わっています。
まずは、Excelの [ファイル] > [オプション] > [トラスト センター] > [トラスト センターの設定] > [マクロの設定] を見てみましょう。
| 設定項目 | 安全性 | 実務での推奨度 | 説明 |
| :— | :—: | :—: | :— |
| 警告を表示せずにすべてのマクロを無効にする | 極高 | △ | 開発したマクロも一切動かなくなるため、業務効率化には不向きです。 |
| 警告を表示してすべてのマクロを無効にする | 最適 | ◎ (デフォルト) | 基本は動かさないが、信頼できるマクロだけを選択して実行できる最もバランスの良い設定です。 |
| デジタル署名されたマクロを除き、すべてのマクロを無効にする | 高 | ◯ | 署名がないマクロは絶対に動きません。社内統制を厳格にしたい場合に有効です。 |
| すべてのマクロを有効にする (推奨しません) | 極低 | 絶対にNG | 悪意あるマクロも全自動で実行されてしまうため、この設定を他人に推奨してはいけません。 |
デフォルト設定である「警告を表示してすべてのマクロを無効にする」のまま、どうやって安全に自分のマクロだけを動かすか。その答えが「デジタル署名」です。
マクロに署名を施すことで、Excelに対して「これは私が責任を持って作った、改ざんされていない安全なマクロです」と証明できるのです。
—
2. 実践:自己署名証明書(Self-Signed Certificate)を作ろう
大企業であれば、パブリックな認証機関から発行された有料のデジタル証明書を使うのが理想ですが、社内やチーム内での配布であれば、Officeに標準付属しているツールで作成できる「自己署名証明書(通称:オレオレ証明書)」で十分に実用的なセキュリティを構築できます。
さっそく、証明書を作ってみましょう!
Step 1: `SelfCert.exe` を探して起動する
Officeには、自己署名証明書を数秒で作れる `SelfCert.exe` という隠れたアプリが同梱されています。インストールされているOfficeのバージョンによって場所が少し異なります。
エクスプローラーを開き、以下のパスを探してみてください。
- Microsoft 365 / Excel 2019 / Excel 2016 (64bit版)
`C:\Program Files\Microsoft Office\root\Office16\`
- Microsoft 365 / Excel 2019 / Excel 2016 (32bit版)
`C:\Program Files (x86)\Microsoft Office\root\Office16\`
> 💡 先輩のアドバイス:
> パスが見つからない場合は、エクスプローラーの検索窓に「`SELFCERT`」と入力して検索してみましょう。
フォルダ内にある `SELFCERT.EXE` をダブルクリックして起動します。
Step 2: 証明書の名前を決める
起動すると、以下のようなシンプルな画面が表示されます。
デジタル証明書の作成 (Create Digital Certificate)
————————————————–
証明書の名前を入力してください (Your certificate’s name):
[ 社内マクロ作成用_開発部_あなたの名前 ]
- 名前の付け方のコツ:
誰が作ったものか一目でわかるように、`[部署名_氏名_VBA開発]` のように具体的に入力しましょう(例:`SalesDiv_Tanaka_VBA`)。
- 入力したら [OK] をクリックします。「デジタル証明書の作成に成功しました」と表示されれば、あなたのPCに「あなた専用のハンコ」が作成されました。
—
3. 実践:VBAプロジェクトに署名を付与する
証明書ができたら、次はExcelファイル(マクロ有効ブック:`.xlsm`)にそのハンコを押す作業です。
Step 1: VBE(Visual Basic Editor)を開く
Excelを開き、`[Alt] + [F11]` キーを押してVBEを起動します。
Step 2: デジタル署名を設定する
1. メニューバーの [ツール] > [デジタル署名] をクリックします。
2. 表示されたダイアログで [選択] ボタンをクリックします。
3. 先ほど作成した自分の証明書(例:`SalesDiv_Tanaka_VBA`)が表示されるので、選択して [OK] をクリックします。
これで、あなたのVBAプロジェクトにデジタル署名が関連付けられました。ブックを上書き保存して、Excelを一度閉じましょう。
—
4. 配布先での「初回起動時」のスマートな振る舞い
署名したマクロを同僚に配布し、相手が初めてそのファイルを開いたときの挙動を確認しましょう。
1. 相手の画面上部に、黄色いバーで 「セキュリティの警告:アクティブ コンテンツが一部無効にされました。」 と表示されます。
2. 黄色いバーの [コンテンツの有効化] をクリックするか、または詳細情報を表示します。
3. ここで「この発行元からのドキュメントをすべて信頼する」を選択します。
たったこれだけです!
一度「信頼する」に設定すると、次回以降、その同僚のPCでは黄色い警告バーすら出ずに、マクロが瞬時に、かつ安全に起動するようになります。
「すべてのマクロを有効にする」に設定変更させる必要は一切ありません。同僚のPCのセキュリティレベルを高い状態に保ったまま、あなたのマクロだけを「特権パス」で通すことができるのです。
—
5. 【プロの知見】陥りやすいエラーと運用の罠
デジタル署名は非常に強力ですが、プログラムのライフサイクルを理解していないと「署名したはずなのに、また警告が出る!」というトラブルに陥ります。プロの現場でよく起こる罠と、その解決策を知っておきましょう。
罠①:コードを1文字でも書き換えると署名は「無効」になる
デジタル署名は、「署名した時点からコードが一切書き換えられていないこと」を証明する仕組みです。
そのため、開発者であるあなたがコードを少しでも修正して保存すると、デジタル署名は自動的に破棄されるか、無効になります。
- 対策:
コードを修正・追加した後は、必ず再度VBEからデジタル署名([ツール] > [デジタル署名])を再適用して保存してから配布してください。
罠②:PCを買い替えると署名が無効になる(自己署名証明書の限界)
自己署名証明書は、その証明書を作ったPCの内部(レジストリ)に秘密鍵を持っています。そのため、別のPCにマクロファイルをコピーして、そこでさらにコードを編集して上書き保存すると、署名は完全に壊れてしまいます。
- 対策:
マクロの「編集・バージョンアップ」を行うのは、必ず証明書を作成した開発用PCで行うというルールを徹底しましょう。
—
6. 発展:署名が難しい環境での「信頼できる場所」自動登録スクリプト
「社内のセキュリティポリシーで、自己署名証明書であってもインポートが制限されている…」
「どうしてもデジタル署名がうまく運用できない…」
そんな時のための、もう一つの極めて強力でプロフェッショナルな解決策が「信頼できる場所(Trusted Locations)」の活用です。
Excelの設定で「特定のフォルダ」を「信頼できる場所」として登録しておくと、そのフォルダの中に置かれたマクロファイルは、署名がなくても警告なしで実行できます。
これをユーザーに手動で設定してもらうのは面倒ですし、設定ミスのもとです。そこで、配布時にダブルクリックしてもらうだけで、特定のフォルダ(例:`C:\ExcelMacro\`)をユーザーのレジストリに「信頼できる場所」として自動登録するVBScript(ブートストラップツール)を共有します。
以下のコードをメモ帳に貼り付け、ファイル名を `RegisterTrustedLocation.vbs` として保存し、配布パッケージに同梱してください。
‘ =========================================================================
‘ 【VBScript】Excel「信頼できる場所」自動登録スクリプト
‘ 用途: 配布先PCでこのスクリプトを実行すると、指定フォルダが信頼された場所
‘ としてレジストリに登録され、警告なしでマクロが実行可能になります。
‘ =========================================================================
Option Explicit
Dim shell, fso, targetFolder
Set shell = CreateObject(“WScript.Shell”)
Set fso = CreateObject(“Scripting.FileSystemObject”)
‘ — 【設定エリア】マクロを配置する専用のフォルダパスを指定します —
targetFolder = “C:\ExcelMacro”
‘ 1. ターゲットフォルダが存在しない場合は自動作成
On Error Resume Next
If Not fso.FolderExists(targetFolder) Then
fso.CreateFolder(targetFolder)
If Err.Number <> 0 Then
MsgBox “フォルダの作成に失敗しました。管理者権限を確認してください。” & vbCrLf & targetFolder, vbCritical, “エラー”
WScript.Quit
End If
End If
On Error GoTo 0
‘ 2. レジストリキーの定義 (Office 2016 / 2019 / 365 共通のキー)
Dim registryPath, valueNamePath, valueDescriptionPath
registryPath = “HKCU\Software\Microsoft\Office\16.0\Excel\Security\Trusted Locations\MyCompanyMacro\”
‘ 3. レジストリへの書き込み
On Error Resume Next
shell.RegWrite registryPath & “Path”, targetFolder, “REG_SZ”
shell.RegWrite registryPath & “Description”, “社内公認マクロ配置フォルダ”, “REG_SZ”
shell.RegWrite registryPath & “AllowSubfolders”, 1, “REG_DWORD”
If Err.Number = 0 Then
MsgBox “設定が完了しました!” & vbCrLf & _
“マクロファイルを以下のフォルダに配置して実行してください:” & vbCrLf & _
targetFolder, vbInformation, “設定完了”
Else
MsgBox “レジストリの登録に失敗しました。” & vbCrLf & Err.Description, vbCritical, “エラー”
End If
On Error GoTo 0
‘ オブジェクトの解放
Set shell = Nothing
Set fso = Nothing
このスクリプトの使い方
1. 同僚に、この `RegisterTrustedLocation.vbs` と、あなたの作ったマクロファイルを一緒に渡します。
2. 同僚に `RegisterTrustedLocation.vbs` をダブルクリックして実行してもらいます。
3. 自動作成された `C:\ExcelMacro` フォルダの中にマクロファイルを移動させます。
4. これだけで、以降はそのフォルダ内のマクロがすべて警告なしで快適に動作します。
—
まとめ
今回は、Excel VBAを社内配布する上で避けては通れない「マクロのセキュリティ」と「デジタル署名」の本質について解説しました。
- 「すべてのマクロを有効にする」は絶対に選ばない・選ばせない
- `SelfCert.exe` で自分だけの証明書を作り、VBEから署名する
- コードを修正したら、署名の再適用を忘れずに行う
- 署名が難しい場合は、VBScriptによる「信頼できる場所」の自動登録を活用する
セキュリティをバイパス(回避)するのではなく、正しく「信頼」を構築すること。これこそが、プロのVBAエンジニアとして信頼されるための第一歩です。
「あなたの作ったツールは、安全で、しかも使いやすい!」と同僚や上司から絶賛される日を楽しみにしています。一歩ずつ、確実に進んでいきましょう!
