マクロが動かないとき、最初に見てほしいのはブックを開いたときに画面上部に出る帯(メッセージ バー)の色です。帯の種類で、原因がほぼ決まります。
| 画面上部の表示 | 原因 | 対処 |
|---|---|---|
| 赤い帯「セキュリティ リスク」(マクロの実行をブロックしました) | インターネット由来のファイルとして、マクロが既定でブロックされている | 原因1・原因2 |
| 黄色い帯「セキュリティの警告」と[コンテンツの有効化]ボタン | マクロが無効の状態で開いている(通常の動作) | 原因3 |
| 「保護されたビュー」と[編集を有効にする] | 保護ビューで開いている | 原因4 |
| 帯は出ないが、マクロの一覧が空・保存したら消えた | ファイル形式 | 原因5 |
| 「コンパイル エラー」「実行時エラー」が出る | コードの参照設定、32/64 ビット、参照先のずれ | 原因6〜原因8 |
| ボタンを押しても反応がない | ボタンとマクロの結び付け、アドイン | 原因9・原因10 |
メールの添付ファイルやブラウザーでダウンロードしたファイルには、Windows が「インターネットから来た」という印(Mark of the Web、MOTW)を付けます。Microsoft は 2022年以降、Windows 版の Office で、この印が付いたファイルのマクロを既定でブロックするように変更しました。このとき表示されるのが赤い「セキュリティ リスク」の帯で、黄色い帯と違って[コンテンツの有効化]ボタンは出ません。
送り主が信頼できるファイルなら、次の手順で印を外せます。
複数のファイルをまとめて外す場合は、PowerShell の Unblock-File コマンドでも同じことができます。
Unblock-File -Path "C:\work\集計.xlsm"
Get-ChildItem "C:\work\*.xlsm" | Unblock-File
注意点が2つあります。
この変更は Windows 版の Office だけのもので、Mac 版、スマホ版、Web 版の Office には影響しません。
決まったフォルダーのマクロ ブックを毎日使う場合は、そのフォルダーを「信頼できる場所」に登録すると、インターネット由来の印のチェックを飛ばしてマクロが有効な状態で開けます。
信頼できる場所に置いたファイルはマクロがブロックされないので、そのフォルダーに誰がファイルを保存できるかは慎重に管理してください。Microsoft はネットワーク上の場所を信頼できる場所にすることは推奨していません。
黄色い「セキュリティの警告」の帯が出ている場合は、通常の動作です。信頼できるファイルなら [コンテンツの有効化] を押せばマクロが動きます。
帯が出ずにマクロが動かない場合は、マクロの設定を確認します。
「VBA マクロを有効にする」(すべてのマクロを無条件に実行する)は、Microsoft も「推奨しません」としています。悪意のあるマクロも動いてしまうため、選ばないでください。会社の PC では、この画面の設定が管理者のポリシーで固定されていることがあります。
メールの添付ファイルなどを開くと、編集できない「保護されたビュー」で開くことがあります。この状態ではマクロは動きません。画面上部の [編集を有効にする] を押してから、改めてマクロを実行します。
通常の Excel ブック(.xlsx)には、マクロを保存できません。マクロ付きのブックを .xlsx で保存すると、保存時に「VB プロジェクトはマクロなしのブックに保存できない」という趣旨の確認が出て、そのまま進めるとマクロは消えます。
すでに .xlsx で上書き保存してマクロが消えた場合、そのファイルからは戻せません。バックアップや、OneDrive・SharePoint のバージョン履歴から以前の版を探してください。
「コンパイル エラー」「ユーザー定義型は定義されていません」と出る場合は、マクロが使っている外部ライブラリが見つからない可能性があります。別の PC で作られたマクロでよく起こります。
Microsoft 365 と Office 2019 以降は、既定で 64 ビット版がインストールされます。Windows の API を呼び出す古いマクロ(Declare 文を含むもの)は、64 ビット版では修正しないと動きません。修正しないまま実行すると、Declare 文に PtrSafe が必要だというエラーが出ます。
Declare 文に PtrSafe を付けるLongPtr 型に変える' 修正前(64 ビット版ではエラー)
Declare Function GetActiveWindow Lib "user32" () As Long
' 修正後
Declare PtrSafe Function GetActiveWindow Lib "user32" () As LongPtr
PtrSafe を付けるだけでは不十分で、中の型も直す必要があります。配布されたマクロなら、作成元に 64 ビット対応版がないか確認するのが早道です。
「実行時エラー '9': インデックスが有効範囲にありません」は、マクロが指しているシート名やブック名が見つからないときに出ます。シート名を変えた、シートを削除した、ブック名が変わった、といった変更がないか確認し、コードの中の名前を今のブックに合わせます。
図形やボタンを押しても何も起きない場合は、ボタンに登録されているマクロが見つからなくなっている可能性があります。ブックをコピーしたり、マクロの名前を変えたりすると起こります。
excel /safe と入力して OK(セーフ モードで起動)会社の PC では、セキュリティ ソフトや管理者のポリシーでマクロの実行そのものが制限されていることがあります。この場合、利用者の操作では解除できないので、情報システム担当に相談してください。