【VBA】マクロのセキュリティ設定と安全な有効化の方法(コピペOK)

VBA
スポンサーリンク

記事ID: 179
タイトル: 【VBA】マクロのセキュリティ設定と安全な有効化の方法(コピペOK)
カテゴリ: シート操作
一次キーワード: VBA マクロ 有効化 セキュリティ設定
想定読者: VBAマクロが動かなくて困っている初心者、社内でマクロ付きブックを配布したい実務担当者
検索意図: VBAマクロのセキュリティ設定を理解して安全にマクロを有効化したい
読者の悩み(1文): マクロを作ったのに「セキュリティの警告」が出て動かない、または配布先で動かないと言われる
読了後にできること(1文): マクロのセキュリティレベルを理解し、信頼できる場所の設定やデジタル署名で安全にマクロを有効化できる
前提条件:
  - Excel版: Excel 2016以降 / Microsoft 365
  - OS: Windows 10/11
  - 保存形式: .xlsm(マクロ有効ブック)
  - 貼り付け場所: 標準モジュール(VBAコードを使う場合)
  - 実行方法: Excelの設定画面から操作 / VBAコードで確認
更新日: 2026-03-25

スポンサーリンク
  1. この記事でできること
  2. どんな場面で使う?
  3. 完成イメージ(Before / After)
  4. マクロのセキュリティレベル一覧
  5. 手順1:現在のセキュリティ設定を確認する
    1. Excel画面から確認する方法
    2. VBAで現在の設定を確認するコード
  6. 手順2:「信頼できる場所」を設定する(基本版)
    1. Excel画面から設定する方法
    2. 設定後の確認
  7. 手順3:実務版 — レジストリで信頼できる場所を設定+デジタル署名+グループポリシー
    1. 実務版コード1:VBAで信頼できる場所を確認する
    2. 実務版コード2:VBAで信頼できる場所を追加する
    3. 実務版コード3:現在のセキュリティ設定を一括確認する
    4. グループポリシーでの一括展開(IT管理者向け)
    5. デジタル署名の手順(概要)
  8. よくある落とし穴7選
    1. VBAマクロが「無効にされました」と表示されて動かないときの対処法
    2. ダウンロードしたExcelファイルのマクロがブロックされるときの対処法
  9. FAQ
    1. Q1. 「すべてのマクロを有効にする」に設定すればいいのでは?
    2. Q2. 企業のPCでセキュリティ設定がグレーアウトして変更できない場合は?
    3. Q3. インターネットからダウンロードしたマクロ付きファイルが動かない場合は?
    4. Q4. VBAのセキュリティ設定を変更せずにマクロを配布する方法はある?
    5. Q5. ブックを開いたときにマクロを自動実行させたい場合は?
  10. まとめ
  11. 次にやりたくなること

この記事でできること

VBAマクロのセキュリティ設定を理解し、安全にマクロを有効化できるようになる。初心者がつまずく「マクロが動かない」問題の原因と対策をすべてカバー。

自分も最初にVBAを覚えたとき、せっかく作ったマクロが「セキュリティの警告」で動かなくて途方に暮れた。しかも社内の別のPCに持って行ったら「マクロが無効にされました」と表示されて、何をどう設定すればいいのか分からなかった。セキュリティ設定の仕組みを理解してからは、自分のPCでも配布先でもマクロがスムーズに動くようになった。

この記事で、同じ「マクロが動かない」で困っている人がスッキリ解決できるようになればうれしい。

  • 対象:マクロが動かなくて困っている人、社内でマクロ付きブックを配布したい人
  • 所要時間:設定完了まで約5〜10分(目安)

どんな場面で使う?

  • 作ったマクロが「セキュリティの警告」で動かなくて困っているとき
  • マクロ付きブックを社内の別PCに配布したら動かないと言われたとき
  • 「信頼できる場所」の設定で特定フォルダのマクロだけ警告なしで実行したいとき
  • Microsoft 365のアップデート後にマクロがブロックされるようになったとき

完成イメージ(Before / After)

Before(設定前)

マクロ付きブックを開くと黄色い警告バーが表示され、「コンテンツの有効化」を毎回クリックする必要がある。または、警告すら出ずマクロが完全にブロックされる。


⚠ セキュリティの警告 マクロが無効にされました。 [コンテンツの有効化]

After(設定後)

信頼できる場所に保存したブックは、警告なしでマクロが自動実行される。配布先でも同じ設定をすればスムーズに動く。

マクロのセキュリティレベル一覧

まず、Excelのマクロセキュリティには4段階のレベルがある。現在の設定を確認しておくこと。

レベル 設定名 動作 おすすめ度
1 すべてのマクロを無効にする(通知なし) マクロが完全にブロック。警告も出ない 企業のセキュリティポリシーで強制されることが多い
2 警告を表示してすべてのマクロを無効にする(デフォルト) 黄色い警告バーが表示される。クリックで有効化 一般的にはこの設定で十分
3 デジタル署名されたマクロを除き、すべてのマクロを無効にする 署名付きマクロのみ自動実行 組織での配布に最適
4 すべてのマクロを有効にする(非推奨) すべてのマクロが警告なしで実行される セキュリティリスクが高い。非推奨

重要: レベル4(すべて有効)は便利だが、不明なマクロも無条件に実行されるため危険。信頼できるファイルだけを安全に実行する方法(信頼できる場所・デジタル署名)をこの記事で紹介する。

手順1:現在のセキュリティ設定を確認する

Excel画面から確認する方法

  1. Excelを開く
  2. ファイル」→「オプション」をクリック
  3. 左メニューの「トラスト センター」(または「セキュリティ センター」)をクリック
  4. トラスト センターの設定」ボタンをクリック
  5. 左メニューの「マクロの設定」をクリック
  6. 現在選択されているレベルを確認する

一般的にはデフォルトの「警告を表示してすべてのマクロを無効にする」が選択されている。

VBAで現在の設定を確認するコード

マクロをボタン1つで実行する方法でボタンに割り当てておくと便利。


Sub CheckMacroSecurityLevel()

    Dim secLevel As Long
    Dim secName As String

    ' セキュリティレベルを取得
    secLevel = Application.AutomationSecurity

    Select Case secLevel
        Case 1  ' msoAutomationSecurityLow
            secName = "すべてのマクロを有効にする(低)"
        Case 2  ' msoAutomationSecurityByUI
            secName = "ユーザーインターフェースの設定に従う(標準)"
        Case 3  ' msoAutomationSecurityForceDisable
            secName = "すべてのマクロを無効にする(高)"
        Case Else
            secName = "不明(値: " & secLevel & ")"
    End Select

    MsgBox "現在のマクロセキュリティレベル:" & vbCrLf & vbCrLf & _
           "値: " & secLevel & vbCrLf & _
           "設定: " & secName, vbInformation, "セキュリティ確認"

End Sub

手順2:「信頼できる場所」を設定する(基本版)

「信頼できる場所」に登録したフォルダ内のブックは、マクロが警告なしで実行される。これが最も手軽で安全な方法

Excel画面から設定する方法

  1. ファイル」→「オプション」→「トラスト センター」→「トラスト センターの設定
  2. 左メニューの「信頼できる場所」をクリック
  3. 新しい場所の追加」ボタンをクリック
  4. 参照」でマクロ付きブックを保存するフォルダを選択
    • 例:C:\VBA_Trusted\
    • 必要に応じて「この場所のサブフォルダーも信頼する」にチェック
    • OK」で閉じる

これで、指定フォルダ内の .xlsm ファイルは警告なしでマクロが実行される。

設定後の確認

  1. マクロ付きブック(.xlsm)を信頼できる場所に保存する
  2. ブックを閉じてから再度開く
  3. 黄色い警告バーが表示されないことを確認する
  4. マクロを実行して正常に動作することを確認する

注意: 信頼できる場所にはネットワークドライブを追加することもできるが、「ネットワーク上にある信頼できる場所を許可する」にチェックが必要。ネットワーク上のファイルはセキュリティリスクが高くなるので、ローカルフォルダを推奨。

手順3:実務版 — レジストリで信頼できる場所を設定+デジタル署名+グループポリシー

社内で複数のPCにマクロ付きブックを配布する場合、1台ずつ手動で設定するのは非現実的。自分も10台以上のPCに配布したとき、手動設定だけで半日かかりそうになった。VBAやレジストリで一括設定する方法を使えば、大幅に時間を短縮できる。

実務版コード1:VBAで信頼できる場所を確認する

現在登録されている「信頼できる場所」の一覧を取得するコード。


Sub ListTrustedLocations()

    Dim i As Long
    Dim regPath As String
    Dim locPath As String
    Dim locDesc As String
    Dim ws As Worksheet
    Dim row As Long
    Dim wsh As Object

    ' 出力先シートを準備
    Set ws = ThisWorkbook.Sheets(1)
    ws.Range("A1:D1").Value = Array("No", "レジストリキー", "パス", "サブフォルダ許可")
    row = 2

    Set wsh = CreateObject("WScript.Shell")

    On Error Resume Next

    ' 信頼できる場所のレジストリを走査(Location0〜Location99)
    For i = 0 To 99
        regPath = "HKCU\Software\Microsoft\Office\16.0\Excel\Security\Trusted Locations\Location" & i & "\"

        locPath = wsh.RegRead(regPath & "Path")

        If Err.Number = 0 Then
            ' パスが取得できた場所を出力
            Dim subFolders As String
            subFolders = ""
            subFolders = wsh.RegRead(regPath & "AllowSubfolders")

            ws.Cells(row, 1).Value = i
            ws.Cells(row, 2).Value = "Location" & i
            ws.Cells(row, 3).Value = locPath
            ws.Cells(row, 4).Value = IIf(subFolders = 1, "はい", "いいえ")
            row = row + 1
        End If

        Err.Clear
    Next i

    On Error GoTo 0

    ' 列幅を自動調整
    ws.Columns("A:D").AutoFit

    Set wsh = Nothing

    MsgBox "信頼できる場所の一覧を出力しました(" & (row - 2) & "件)。", vbInformation

End Sub

実務版コード2:VBAで信頼できる場所を追加する


Sub AddTrustedLocation()

    Dim wsh As Object
    Dim regBase As String
    Dim locationNum As Long
    Dim trustedPath As String
    Dim allowSubfolders As Boolean
    Dim description As String

    ' ===== ★ ここを環境に合わせて変更 ===== '
    trustedPath = "C:\VBA_Trusted\"    ' 信頼する場所のパス(末尾に \ を付ける)
    allowSubfolders = True              ' サブフォルダも信頼するか
    description = "VBAマクロ用フォルダ"  ' 説明(任意)
    locationNum = 50                    ' Location番号(既存と重複しない番号を指定)
    ' ===== ★ 変更ここまで ===== '

    ' パスの存在確認
    If Dir(trustedPath, vbDirectory) = "" Then
        MsgBox "指定フォルダが存在しません: " & trustedPath, vbExclamation
        Exit Sub
    End If

    Set wsh = CreateObject("WScript.Shell")

    regBase = "HKCU\Software\Microsoft\Office\16.0\Excel\Security\Trusted Locations\Location" & locationNum & "\"

    On Error GoTo RegError

    ' レジストリに書き込み
    wsh.RegWrite regBase & "Path", trustedPath, "REG_SZ"
    wsh.RegWrite regBase & "AllowSubfolders", IIf(allowSubfolders, 1, 0), "REG_DWORD"
    wsh.RegWrite regBase & "Description", description, "REG_SZ"

    On Error GoTo 0

    Set wsh = Nothing

    MsgBox "信頼できる場所を追加しました。" & vbCrLf & vbCrLf & _
           "パス: " & trustedPath & vbCrLf & _
           "サブフォルダ: " & IIf(allowSubfolders, "許可", "不許可") & vbCrLf & vbCrLf & _
           "反映にはExcelの再起動が必要です。", vbInformation

    Exit Sub

RegError:
    MsgBox "レジストリへの書き込みに失敗しました。" & vbCrLf & _
           "エラー: " & Err.Description & vbCrLf & vbCrLf & _
           "管理者権限が必要な場合があります。", vbCritical
    Set wsh = Nothing

End Sub

注意: レジストリの 16.0 はOffice 2016/2019/365に対応。Office 2013は 15.0、Office 2021も 16.0。バージョンが異なる場合は数値を変更すること。

実務版コード3:現在のセキュリティ設定を一括確認する

社内配布時に「マクロが動かない」と問い合わせがあったとき、相手のPCの設定を確認するためのコード。結果をシートに出力するので、スクリーンショットを送ってもらえば原因が分かる。


Sub DiagnoseSecuritySettings()

    Dim ws As Worksheet
    Dim row As Long
    Dim wsh As Object
    Dim regVal As Variant

    Set ws = ThisWorkbook.Sheets(1)
    ws.Cells.Clear

    ws.Range("A1").Value = "マクロセキュリティ診断結果"
    ws.Range("A1").Font.Bold = True
    ws.Range("A1").Font.Size = 14

    ws.Range("A2").Value = "診断日時: " & Format(Now, "yyyy-mm-dd hh:nn:ss")
    ws.Range("A3").Value = "PC名: " & Environ("COMPUTERNAME")
    ws.Range("A4").Value = "ユーザー: " & Environ("USERNAME")
    ws.Range("A5").Value = "Excelバージョン: " & Application.Version
    ws.Range("A6").Value = "ビルド: " & Application.Build

    row = 8
    ws.Cells(row, 1).Value = "項目"
    ws.Cells(row, 2).Value = "値"
    ws.Cells(row, 3).Value = "説明"
    ws.Range("A" & row & ":C" & row).Font.Bold = True
    row = row + 1

    ' AutomationSecurity
    ws.Cells(row, 1).Value = "AutomationSecurity"
    ws.Cells(row, 2).Value = Application.AutomationSecurity
    Select Case Application.AutomationSecurity
        Case 1: ws.Cells(row, 3).Value = "低(すべて有効)"
        Case 2: ws.Cells(row, 3).Value = "標準(UI設定に従う)"
        Case 3: ws.Cells(row, 3).Value = "高(すべて無効)"
    End Select
    row = row + 1

    ' ファイルの保存形式
    ws.Cells(row, 1).Value = "ブックの拡張子"
    ws.Cells(row, 2).Value = Right(ThisWorkbook.Name, Len(ThisWorkbook.Name) - InStrRev(ThisWorkbook.Name, ".") + 1)
    If Right(ThisWorkbook.Name, 5) = ".xlsm" Then
        ws.Cells(row, 3).Value = "OK(マクロ有効ブック)"
    ElseIf Right(ThisWorkbook.Name, 5) = ".xlsx" Then
        ws.Cells(row, 3).Value = "NG(マクロが保存されない)"
    Else
        ws.Cells(row, 3).Value = "確認が必要"
    End If
    row = row + 1

    ' ブックのパス
    ws.Cells(row, 1).Value = "ブックの保存先"
    ws.Cells(row, 2).Value = ThisWorkbook.Path
    row = row + 1

    ' 信頼できる場所に含まれるか確認
    Set wsh = CreateObject("WScript.Shell")
    Dim isTrusted As Boolean
    Dim i As Long
    Dim locPath As String
    isTrusted = False

    On Error Resume Next
    For i = 0 To 99
        locPath = wsh.RegRead("HKCU\Software\Microsoft\Office\16.0\Excel\Security\Trusted Locations\Location" & i & "\Path")
        If Err.Number = 0 Then
            If InStr(1, ThisWorkbook.Path & "\", locPath, vbTextCompare) = 1 Then
                isTrusted = True
                Exit For
            End If
        End If
        Err.Clear
    Next i
    On Error GoTo 0

    ws.Cells(row, 1).Value = "信頼できる場所に含まれるか"
    If isTrusted Then
        ws.Cells(row, 2).Value = "はい"
        ws.Cells(row, 3).Value = "マクロは警告なしで実行可能"
    Else
        ws.Cells(row, 2).Value = "いいえ"
        ws.Cells(row, 3).Value = "毎回「コンテンツの有効化」が必要"
    End If
    row = row + 1

    Set wsh = Nothing

    ' 列幅を自動調整
    ws.Columns("A:C").AutoFit

    MsgBox "セキュリティ診断が完了しました。" & vbCrLf & _
           "結果をシートに出力しています。", vbInformation

End Sub

グループポリシーでの一括展開(IT管理者向け)

企業のIT管理者が複数PCに一括設定する場合は、グループポリシー(GPO) を使う。

  1. Office管理用テンプレート(ADMX) をダウンロードしてドメインコントローラーにインストール
  2. グループポリシー管理エディターで以下を設定:
    • ユーザーの構成管理用テンプレートMicrosoft Excel 2016Excel のオプションセキュリティセキュリティ センター
    • 信頼できる場所」に共有フォルダのパスを追加
    • VBA マクロの通知設定」で適切なレベルを選択
    • GPOをOU(組織単位)に適用

この方法はドメイン環境が必要。詳細な手順はIT部門と相談すること。

デジタル署名の手順(概要)

マクロにデジタル署名を付けると、署名付きマクロのみ実行を許可する設定で安全に運用できる。

  1. 自己署名証明書を作成:VBEの「ツール」→「デジタル署名」→「選択」→「OK」(SelfCert.exe を使用)
  2. VBAプロジェクトに署名:VBEで「ツール」→「デジタル署名」→ 証明書を選択
  3. 証明書を信頼済みに追加:配布先PCで証明書をインストール

自己署名証明書は組織内での配布向け。外部配布には商用の証明書(コードサイニング証明書)が必要。

よくある落とし穴7選

# 症状 原因 対策
1 「コンテンツの有効化」ボタンが表示されない(マクロが完全にブロック) セキュリティレベルが「すべてのマクロを無効にする(通知なし)」に設定されている トラスト センターでレベルを「警告を表示して無効にする」に変更する
2 マクロを保存したのに開き直すとコードが消えている .xlsx で保存している(マクロ非対応形式) .xlsm(マクロ有効ブック)で保存し直す
3 信頼できる場所に追加したのにまだ警告が出る Excelを再起動していない、またはパスが微妙に違う(末尾の \ の有無など) Excelを完全に閉じて再起動する。パスを正確にコピペする
4 配布先のPCでマクロが動かないと言われる 配布先のセキュリティ設定が異なる、またはIT部門のポリシーでブロックされている 配布先のセキュリティ設定を確認する(DiagnoseSecuritySettingsコードを実行してもらう)
5 ネットワークフォルダの信頼できる場所が効かない 「ネットワーク上にある信頼できる場所を許可する」にチェックが入っていない トラスト センター → 信頼できる場所 → 下部のチェックボックスを有効にする
6 Microsoft 365のアップデート後にマクロがブロックされるようになった 2022年以降、インターネットからダウンロードしたファイルのマクロがデフォルトでブロックされる仕様変更 ファイルのプロパティ → 全般タブ → 「ブロックの解除」にチェック、またはファイルを信頼できる場所に移動する
7 レジストリでLocation番号が重複して既存の設定が上書きされた AddTrustedLocationで既存と同じ番号を指定した 先にListTrustedLocationsで既存の番号を確認してから、空いている番号を使う

自分がハマったのは落とし穴6番。ある日突然マクロが動かなくなって、設定は何も変えていないのにおかしいと思ったら、Microsoft 365のアップデートが原因だった。ダウンロードしたファイルに「ブロック」属性が付いていて、プロパティから解除したら動いた。最初これに気づかず1時間くらい原因を探してしまった。

VBAマクロが「無効にされました」と表示されて動かないときの対処法

「コンテンツの有効化ボタンが出ない」場合、セキュリティレベルが「すべてのマクロを無効にする(通知なし)」に設定されていることが原因だ。「ファイル」→「オプション」→「トラスト センター」→「マクロの設定」で「警告を表示してすべてのマクロを無効にする」に変更しよう。

ダウンロードしたExcelファイルのマクロがブロックされるときの対処法

「自分で作ったファイルなのにマクロがブロックされる」場合、Microsoft 365の2022年以降の仕様変更でインターネットからダウンロードしたファイルに「ブロック」属性が付いていることが原因だ。ファイルを右クリック→「プロパティ」→「全般」タブの「ブロックの解除」にチェックを入れるか、ファイルを「信頼できる場所」に移動しよう。

FAQ

Q1. 「すべてのマクロを有効にする」に設定すればいいのでは?

確かに最も簡単だが、セキュリティリスクが高い。不明なマクロ付きファイルを開いたときも無条件に実行されてしまう。「信頼できる場所」を設定すれば、指定フォルダ内のファイルだけ警告なしで実行でき、それ以外は通常のセキュリティが維持される。自分はこの方法で落ち着いている。

Q2. 企業のPCでセキュリティ設定がグレーアウトして変更できない場合は?

IT部門がグループポリシーで設定を強制している可能性が高い。この場合、ユーザー側では変更できない。IT部門に「信頼できる場所の追加」を依頼するか、マクロ付きブックの保存先を既に信頼されているフォルダに変更する。エラー処理(On Error)で止まらないマクロを作る方法でエラーハンドリングを入れておくと、ブロックされた場合でも安全に停止できる。

Q3. インターネットからダウンロードしたマクロ付きファイルが動かない場合は?

Windows が「Mark of the Web(MOTW)」というブロック属性を付けている。ファイルを右クリック → プロパティ → 全般タブの下部にある「ブロックの解除」にチェックを入れて「OK」をクリックする。または、ファイルを信頼できる場所に移動する。

Q4. VBAのセキュリティ設定を変更せずにマクロを配布する方法はある?

マクロにショートカットキーを割り当てて素早く実行する方法で紹介しているように、個人用マクロブック(PERSONAL.xlsb) に保存する方法がある。個人用マクロブックは信頼できる場所(XLSTART フォルダ)に保存されるため、セキュリティ設定に関係なく実行できる。ただし配布ではなく個人利用向け。

Q5. ブックを開いたときにマクロを自動実行させたい場合は?

ブックを開いたとき・保存時に自動実行するイベント処理の方法で解説している Workbook_Open イベントを使う。ただし、信頼できる場所に保存していない場合は「コンテンツの有効化」をクリックするまで自動実行されない。

まとめ

この記事では、VBAマクロのセキュリティ設定の仕組みと、安全にマクロを有効化する方法を紹介した。

  • セキュリティレベル:4段階あり、デフォルトは「警告を表示して無効にする」
  • 信頼できる場所:指定フォルダ内のブックのみ警告なしで実行(最も手軽で安全)
  • レジストリ設定:VBAで信頼できる場所を確認・追加できる(社内配布時に便利)
  • デジタル署名:署名付きマクロのみ許可する運用(組織向け)
  • グループポリシー:IT管理者が複数PCに一括展開(ドメイン環境向け)

マクロの基本的なエラー処理を押さえたい場合は、エラー処理(On Error)で止まらないマクロを作る方法を参照。ボタンでマクロを実行する方法はマクロをボタン1つで実行する方法で解説している。

マクロの実行が遅い場合は画面更新・再計算を止めてマクロを高速化する方法も参考になる。

次にやりたくなること

コメント

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