※本ページにはプロモーション(広告)が含まれています
Excelで作成したVBAマクロを実行しようとしたら、「マクロが無効です」と表示されたり、「実行時エラー ‘1004’」などのエラーが出て動かなくなった経験はありませんか?
VBAマクロは業務効率化に欠かせない機能ですが、セキュリティ設定の変更、参照設定の破損、コードのバグなど、さまざまな原因で突然動かなくなることがあります。特に2024年以降、MicrosoftがVBAマクロのセキュリティポリシーを強化したことで、「昨日まで動いていたマクロが急に動かなくなった」というトラブルが急増しています。
この記事では、ExcelのVBAマクロが動かない原因を体系的に整理し、エラーコード別の具体的な対処法をステップ形式で解説します。初心者の方でも順番に確認していけば問題を解決できるよう、図解付きで丁寧に説明していきます。

この記事でわかること
- VBAマクロが動かない・無効になる7つの主な原因
- マクロのセキュリティ設定(トラストセンター)の正しい確認・変更方法
- 実行時エラー(1004、91、424、13、9など)のエラーコード別対処法
- 参照設定エラー(MISSING)の修正手順
- VBAのデバッグ方法と効率的なエラー特定テクニック
- ファイル形式(.xlsm / .xls / .xlsx)の互換性問題の解決法
- Excelの修復・再インストールによる根本的な解決方法
Excel VBAマクロの基礎知識
具体的な対処法に入る前に、VBAマクロの基本的な仕組みを理解しておきましょう。原因の特定がスムーズになります。
VBAマクロとは?
VBA(Visual Basic for Applications)は、Microsoft Officeに搭載されているプログラミング言語です。Excelでは、繰り返し行う操作を自動化したり、独自の関数を作成したりするために使われます。
たとえば、毎月のレポート作成で「データを集計→グラフを作成→印刷用に整形」という一連の作業を、ボタン1つで自動実行できるようにするのがVBAマクロの典型的な使い方です。
VBAマクロが実行される仕組み
VBAマクロが正常に動作するためには、以下の条件がすべて揃っている必要があります。
| 条件 | 説明 |
|---|---|
| マクロ対応ファイル形式 | .xlsm(マクロ有効ブック)または .xls(旧形式)で保存されている |
| セキュリティ設定で許可 | トラストセンターでマクロの実行が許可されている |
| 参照設定が正常 | VBAが使用する外部ライブラリへの参照が正しく設定されている |
| コードにエラーがない | 構文エラーや実行時エラーがなく正しく記述されている |
| Excelが正常に動作 | Excel自体が破損しておらず、アドインが競合していない |
この5つの条件のうち、どれか1つでも満たされていないと、マクロは正常に動作しません。以下のセクションでは、それぞれの条件に対応する原因と対処法を詳しく解説していきます。
VBAマクロが動かない7つの主な原因
VBAマクロが動かなくなる原因は、大きく分けて以下の7つに分類できます。まずは全体像を把握しましょう。
| 原因 | 難易度 | よくある症状 |
|---|---|---|
| 1. マクロのセキュリティ設定 | 初級 | 「マクロが無効にされました」と表示 |
| 2. ファイル形式の問題 | 初級 | 保存したはずのマクロが消えている |
| 3. 参照設定のエラー | 中級 | 「コンパイルエラー」が発生 |
| 4. 実行時エラー(コードのバグ) | 中級 | 「実行時エラー ‘XXXX’」と表示 |
| 5. インターネットからダウンロードしたファイルのブロック | 初級 | マクロが完全に無効化されている |
| 6. アドインの競合 | 中級 | 特定のPCだけマクロが動かない |
| 7. Excel自体の不具合 | 上級 | すべてのマクロが動かない |
以下、それぞれの原因について具体的な対処法を解説していきます。
対処法1:マクロのセキュリティ設定を確認・変更する
VBAマクロが動かない最も多い原因が、セキュリティ設定によるブロックです。Excelはセキュリティ上の理由から、初期状態ではマクロの実行を制限しています。
マクロが無効になっているか確認する方法
ファイルを開いた際に、画面上部に黄色い「セキュリティの警告」バーが表示されている場合、マクロがブロックされています。
確認手順:
- マクロを含むExcelファイル(.xlsm)を開く
- 画面上部に「セキュリティの警告:マクロが無効にされました。」と表示されるか確認
- 表示されている場合は「コンテンツの有効化」ボタンをクリック
「コンテンツの有効化」ボタンをクリックすると、そのファイルのマクロが一時的に有効になります。ただし、ファイルを閉じて再度開くと、再びブロックされる場合があります。
トラストセンターでマクロの設定を変更する
毎回「コンテンツの有効化」をクリックするのが面倒な場合や、警告バーが表示されない場合は、トラストセンターの設定を確認・変更します。
設定手順:
- 「ファイル」タブをクリック
- 左側メニューの「オプション」をクリック
- 「Excelのオプション」画面で、左側の「トラストセンター」をクリック
- 「トラストセンターの設定」ボタンをクリック
- 左側メニューの「マクロの設定」をクリック
- 以下の4つのオプションから適切なものを選択
| 設定 | 動作 | 推奨度 |
|---|---|---|
| 警告を表示せずにすべてのマクロを無効にする | マクロが完全にブロックされ、通知も出ない | 非推奨 |
| 警告を表示してすべてのマクロを無効にする | マクロがブロックされるが、有効化ボタンが表示される | 推奨(初期値) |
| デジタル署名されたマクロを除き、すべてのマクロを無効にする | 署名付きマクロのみ自動実行される | 企業向け |
| すべてのマクロを有効にする | すべてのマクロが自動で実行される | 非推奨(危険) |
信頼できる場所(トラステッドロケーション)を設定する
特定のフォルダに保存されたマクロファイルを常に信頼済みとして扱いたい場合は、「信頼できる場所」に登録する方法が最も安全で便利です。
設定手順:
- 「ファイル」→「オプション」→「トラストセンター」→「トラストセンターの設定」を開く
- 左側メニューの「信頼できる場所」をクリック
- 「新しい場所の追加」ボタンをクリック
- 「参照」ボタンでマクロファイルを保存しているフォルダを選択
- 必要に応じて「この場所のサブフォルダーも信頼する」にチェック
- 「OK」をクリックして設定完了
この設定を行うと、登録したフォルダ内のマクロファイルは、セキュリティ警告なしで自動的にマクロが有効になります。
対処法2:ファイル形式を確認する(.xlsx → .xlsm)
Excelの標準ファイル形式である「.xlsx」はマクロを保存できません。VBAマクロを含むファイルは「.xlsm」(マクロ有効ブック)形式で保存する必要があります。
よくあるファイル形式のトラブル
| 形式 | 拡張子 | マクロ保存 | 注意点 |
|---|---|---|---|
| Excelブック | .xlsx | 不可 | マクロを含んで保存すると警告なく削除される |
| マクロ有効ブック | .xlsm | 可能 | VBAマクロの標準保存形式 |
| Excel 97-2003ブック | .xls | 可能 | 旧形式。互換性の問題が起きることがある |
| Excelバイナリブック | .xlsb | 可能 | 高速だが一部の機能に制限あり |
ファイル形式を.xlsmに変更する手順
- マクロを含むExcelファイルを開く
- 「ファイル」→「名前を付けて保存」をクリック
- 保存先を選択し、ファイル名の下にある「ファイルの種類」をクリック
- 一覧から「Excel マクロ有効ブック (*.xlsm)」を選択
- 「保存」をクリック
対処法3:インターネットからダウンロードしたファイルのブロックを解除する
2022年以降、Microsoftはインターネットからダウンロードしたファイルに含まれるVBAマクロをデフォルトでブロックするポリシーを導入しました。この場合、「コンテンツの有効化」ボタンも表示されず、マクロが完全に無効化されます。
ブロックされているか確認する方法
ファイルを開いたときに、画面上部に赤い「セキュリティリスク」バーが表示され、以下のメッセージが出る場合は、インターネットからのファイルとしてブロックされています。
「セキュリティリスク:このファイルのソースが信頼できないため、Microsoftはマクロの実行をブロックしました。」
ブロック解除の手順(Windows)
- Excelファイルを閉じる
- エクスプローラーでファイルを右クリック→「プロパティ」を開く
- 「全般」タブの最下部に「セキュリティ:このファイルは他のコンピューターから取得したものです。このコンピューターを保護するため、このファイルへのアクセスはブロックされる可能性があります。」と表示されている
- 「許可する」のチェックボックスにチェックを入れる
- 「適用」→「OK」をクリック
- ファイルを再度Excelで開く
これでマクロのブロックが解除され、通常通り「コンテンツの有効化」ボタンが表示されるようになります。
PowerShellで複数ファイルを一括解除する方法
大量のファイルを一括でブロック解除したい場合は、PowerShellを使うと効率的です。
# 指定フォルダ内のxlsmファイルをすべてブロック解除
Get-ChildItem -Path "C:\Users\Username\Documents\マクロ" -Filter *.xlsm | Unblock-File
対処法4:参照設定のエラー(MISSING)を修正する
VBAエディタで「コンパイルエラー:プロジェクトまたはライブラリが見つかりません」と表示される場合、参照設定が壊れている可能性があります。
参照設定とは?
VBAの参照設定は、外部のライブラリ(DLLやタイプライブラリ)を使用するための設定です。たとえば、VBAからOutlookを操作するには「Microsoft Outlook XX.0 Object Library」への参照が必要です。
Officeのバージョンアップやアンインストール、PCの移行などによって、参照先のライブラリが見つからなくなると「MISSING」と表示され、マクロがコンパイルエラーになります。
参照設定の確認・修正手順
- Alt + F11 キーを押してVBAエディタ(VBE)を開く
- メニューバーの「ツール」→「参照設定」をクリック
- 一覧の中で「MISSING:」と表示されている項目がないか確認
- 「MISSING:」がある場合、その項目のチェックを外す
- 代わりに正しいバージョンのライブラリを探してチェックを入れる
- 「OK」をクリックして閉じる

レイトバインディングへの書き換え例
たとえば、Outlookを操作するVBAコードの場合:
アーリーバインディング(参照設定が必要):
Dim olApp As Outlook.Application
Set olApp = New Outlook.Application
レイトバインディング(参照設定が不要):
Dim olApp As Object
Set olApp = CreateObject("Outlook.Application")
対処法5:よくある実行時エラーとその解決法
VBAの実行時エラーは、マクロが動作中に問題が発生したときに表示されます。エラー番号ごとに原因と対処法が異なるため、表示されたエラー番号を確認して対応しましょう。
実行時エラー 1004:アプリケーション定義またはオブジェクト定義のエラー
これは最も頻出するVBAエラーです。さまざまな原因で発生するため、以下の主要な原因を順番に確認してください。
原因1:存在しないシートやセルを参照している
' エラー例:「Sheet2」が存在しないときにエラー
Sheets("Sheet2").Range("A1").Value = "テスト"
' 対処法:シートの存在を事前にチェック
Dim ws As Worksheet
On Error Resume Next
Set ws = Sheets("Sheet2")
On Error GoTo 0
If ws Is Nothing Then
MsgBox "Sheet2が見つかりません"
Else
ws.Range("A1").Value = "テスト"
End If
原因2:保護されたシートに書き込もうとしている
' 対処法:シートの保護を一時的に解除
ActiveSheet.Unprotect Password:="パスワード"
' (処理を実行)
ActiveSheet.Protect Password:="パスワード"
原因3:コピー&ペーストの範囲が不正
' エラーになるコード(結合セルへの貼り付けなど)
Range("A1:C10").Copy
Range("D1").PasteSpecial
' 対処法:貼り付け先の範囲を明確にする
Range("A1:C10").Copy Destination:=Range("D1")
実行時エラー 91:オブジェクト変数またはWithブロック変数が設定されていません
オブジェクト型の変数にNothing(空)が入っている状態でプロパティやメソッドにアクセスしようとすると発生します。
' エラー例:Findで見つからなかったときにNothingになる
Dim rng As Range
Set rng = Sheets("Sheet1").Range("A:A").Find("検索値")
rng.Interior.Color = vbYellow ' ← rngがNothingの場合エラー91
' 対処法:Nothingチェックを追加
Dim rng As Range
Set rng = Sheets("Sheet1").Range("A:A").Find("検索値")
If Not rng Is Nothing Then
rng.Interior.Color = vbYellow
Else
MsgBox "検索値が見つかりませんでした"
End If
実行時エラー 424:オブジェクトが必要です
オブジェクトとして認識されない変数や式をオブジェクトとして使おうとすると発生します。
主な原因と対処法:
- Setキーワードの付け忘れ:オブジェクト変数への代入にはSetが必要(
Set ws = Sheets("Sheet1")) - スペルミス:オブジェクト名やメソッド名のスペルが間違っている
- ActiveXコントロールの破損:フォーム上のコントロールが壊れている場合、再配置が必要
実行時エラー 13:型が一致しません
変数に格納しようとした値のデータ型が、変数の宣言型と一致しない場合に発生します。
' エラー例:数値型変数に文字列を代入
Dim num As Integer
num = Range("A1").Value ' ← A1に「abc」が入っているとエラー13
' 対処法:IsNumericで事前チェック
Dim num As Variant
num = Range("A1").Value
If IsNumeric(num) Then
Dim result As Integer
result = CInt(num)
Else
MsgBox "セルA1に数値以外のデータが入っています"
End If
実行時エラー 9:インデックスが有効範囲にありません
配列やコレクションの要素に、存在しないインデックスでアクセスしようとすると発生します。
' エラー例:存在しないシートにアクセス
Dim ws As Worksheet
Set ws = Worksheets("売上データ") ' ← シート名が違うとエラー9
' 対処法:シート名を正確に確認する
' イミディエイトウィンドウで確認コマンド:
' For Each s In Worksheets: Debug.Print s.Name: Next
実行時エラー 53:ファイルが見つかりません
DLLファイルや外部ファイルを参照するコードで、指定されたパスにファイルが存在しない場合に発生します。
対処法:
- ファイルパスが正しいか確認する(特に円マークの有無、フォルダ名の変更)
- ネットワークドライブの場合、接続が切れていないか確認する
Dir()関数でファイルの存在を事前にチェックするコードを追加する
対処法6:VBAのデバッグ方法を習得する
エラーが発生した場合、デバッグ機能を活用することで原因を効率的に特定できます。VBAエディタ(VBE)には強力なデバッグツールが搭載されています。
ステップ実行(F8キー)
コードを1行ずつ実行して、どの行でエラーが発生するかを特定する最も基本的なデバッグ方法です。
手順:
- Alt + F11 でVBAエディタを開く
- デバッグしたいプロシージャ(Sub、Function)の中にカーソルを置く
- F8キーを押すと、1行ずつ実行される
- 黄色くハイライトされた行が「次に実行される行」
- エラーが発生する行を特定したら、その行の変数や式を確認する
ブレークポイントの設定(F9キー)
特定の行で実行を一時停止させたい場合は、ブレークポイントを設定します。
手順:
- 一時停止させたい行にカーソルを置く
- F9キーを押す(行が赤くハイライトされる)
- マクロを実行すると、ブレークポイントの行で一時停止する
- 変数の値を確認し、F5で続行またはF8でステップ実行
イミディエイトウィンドウ(Ctrl + G)
デバッグ中に変数の値を確認したり、簡単な式を実行したりできるウィンドウです。
便利な使い方:
' 変数の値を確認
? myVariable
' セルの値を確認
? Range("A1").Value
' シート数を確認
? Worksheets.Count
' 式の結果を確認
? IsNumeric(Range("B5").Value)
ウォッチウィンドウ
特定の変数や式の値をリアルタイムで監視できるウィンドウです。
設定方法:
- VBAエディタのメニューから「表示」→「ウォッチウィンドウ」を開く
- 監視したい変数を右クリック→「ウォッチ式の追加」を選択
- ステップ実行中に、ウォッチウィンドウで値の変化をリアルタイムに確認できる
エラーハンドリングの実装
本番環境で使うマクロには、必ずエラーハンドリングを実装しましょう。これにより、エラーが発生してもマクロが突然停止せず、ユーザーに適切なメッセージを表示できます。
Sub SampleMacro()
On Error GoTo ErrorHandler
' === メインの処理 ===
Dim ws As Worksheet
Set ws = Worksheets("データ")
ws.Range("A1").Value = "処理完了"
Exit Sub
ErrorHandler:
MsgBox "エラーが発生しました。" & vbCrLf & _
"エラー番号: " & Err.Number & vbCrLf & _
"内容: " & Err.Description, vbExclamation
End Sub
対処法7:アドインの競合を確認する
Excelにインストールされているアドインが原因でVBAマクロが動作しない場合があります。特に、サードパーティ製のアドインがVBAの動作に干渉するケースが報告されています。
アドインを無効にして確認する手順
- 「ファイル」→「オプション」→「アドイン」をクリック
- 画面下部の「管理」で「COMアドイン」を選択し、「設定」をクリック
- 表示されたアドインのチェックをすべて外して「OK」をクリック
- Excelを再起動して、マクロが動作するか確認
- 動作した場合、アドインを1つずつ有効にして原因のアドインを特定する
Excelアドイン(.xlam)も確認する
COMアドインだけでなく、Excelアドイン(.xlam形式)も競合の原因になることがあります。
- 「ファイル」→「オプション」→「アドイン」を開く
- 画面下部の「管理」で「Excelアドイン」を選択し、「設定」をクリック
- 同様にすべてのチェックを外して確認
対処法8:Excelの修復・再インストール
上記の対処法をすべて試してもVBAが動作しない場合、Excel(Office)自体が破損している可能性があります。
Officeの修復(クイック修復)
- Windowsの「設定」→「アプリ」→「アプリと機能」を開く
- 一覧から「Microsoft Office」(またはMicrosoft 365)を選択
- 「変更」ボタンをクリック
- 「クイック修復」を選択して「修復」をクリック
- 修復完了後、PCを再起動
オンライン修復(クイック修復で解決しない場合)
クイック修復で解決しない場合は、オンライン修復を実行します。これはOfficeを完全に再構築するため、より多くの問題を解決できます。
- 上記の手順1〜3まで同じ操作を行う
- 「オンライン修復」を選択して「修復」をクリック
- インターネットに接続した状態で、修復が完了するまで待つ(30分〜1時間程度)
- 完了後、PCを再起動
Excelをセーフモードで起動する
修復の前に、まずセーフモードで起動して問題の切り分けを行うのも有効です。
- Ctrlキーを押しながらExcelのアイコンをダブルクリック
- 「セーフモードで起動しますか?」と表示されたら「はい」をクリック
- セーフモードでは、アドインやカスタマイズが読み込まれない状態で起動する
- この状態でマクロが動作すれば、アドインやカスタマイズが原因
実行時エラーコード対応表
VBAで頻出するエラーコードの一覧と、それぞれの原因・対処法をまとめました。エラーが発生したときの参照用としてお使いください。
| エラー番号 | メッセージ | 主な原因 | 対処法 |
|---|---|---|---|
| 5 | プロシージャの呼び出しが不正です | 関数の引数が不正 | 引数の型や数を確認 |
| 6 | オーバーフローしました | 変数型の範囲を超える値 | Long型やDouble型に変更 |
| 9 | インデックスが有効範囲にありません | 存在しないシート名や配列番号 | シート名や配列サイズを確認 |
| 11 | 0で除算しました | 割り算の分母が0 | 分母が0でないか事前にチェック |
| 13 | 型が一致しません | データ型の不一致 | IsNumericなどで事前チェック |
| 53 | ファイルが見つかりません | 外部ファイルのパスが不正 | ファイルパスの存在を確認 |
| 70 | 書き込みできません | ファイルが他のプロセスで使用中 | ファイルを閉じてから再実行 |
| 91 | オブジェクト変数が設定されていません | Nothing状態のオブジェクトにアクセス | Nothingチェックを追加 |
| 424 | オブジェクトが必要です | Setの付け忘れ、スペルミス | Set文の有無とスペルを確認 |
| 438 | プロパティまたはメソッドをサポートしていません | オブジェクトに存在しないメソッドを呼び出し | オブジェクトの型とメソッド名を確認 |
| 1004 | アプリケーション定義のエラー | 多種多様(セル操作、シート保護など) | 本記事の「エラー1004」セクション参照 |
| 1004 | マクロ ‘XXXX’ を実行できません | マクロが見つからない、セキュリティでブロック | マクロの有効化とマクロ名を確認 |

よくある質問(FAQ)
まとめ
ExcelのVBAマクロが動かない原因は多岐にわたりますが、この記事で紹介した対処法を順番に確認していけば、ほとんどの問題は解決できます。
確認すべきポイントを優先度順にまとめると:
| 優先度 | 確認項目 | 対象 |
|---|---|---|
| 1(最初に確認) | マクロのセキュリティ設定・コンテンツの有効化 | マクロ自体が実行されない場合 |
| 2 | ファイル形式(.xlsx→.xlsm)の確認 | マクロが消えてしまった場合 |
| 3 | インターネットダウンロードファイルのブロック解除 | メールやWebからの取得ファイル |
| 4 | 参照設定のMISSINGチェック | コンパイルエラーの場合 |
| 5 | 実行時エラーのコード別対処 | エラー番号が表示される場合 |
| 6 | アドインの無効化 | 特定のPC環境だけ動かない場合 |
| 7(最終手段) | Officeの修復・再インストール | すべてのマクロが動かない場合 |
VBAマクロは一度正しく動くようになれば、業務の大幅な効率化につながる強力なツールです。エラーが発生しても焦らず、この記事の手順に沿って1つずつ原因を切り分けていきましょう。
また、今後のトラブルを予防するために、以下の3点を習慣づけることをおすすめします。
- VBAファイルは必ず.xlsm形式で保存する
- エラーハンドリング(On Error GoTo)をマクロに実装する
- 定期的にVBAプロジェクトのバックアップ(.basファイルとしてエクスポート)を取る
これらの対策を実施しておけば、万が一トラブルが発生しても迅速に復旧できます。快適なVBAライフをお送りください。
minto.tech スマホ(Android/iPhone)・PC(Mac/Windows)の便利情報をお届け! 月間アクセス160万PV!スマートフォン、タブレット、パソコン、地デジに関する素朴な疑問や、困ったこと、ノウハウ、コツなどが満載のお助け記事サイトはこちら!