Excelマクロ(VBA)が動かない・エラーが出るときの原因切り分け【症状別】
「マクロを実行したら、赤い文字で 実行時エラー '13': 型が一致しません というダイアログが出た…」
「もらったマクロを開いたら警告バーが出て、そもそも実行できない/ボタンが見当たらない…」
「エラーは出ないのに、重複を消すマクロを動かしたら一部の行しか処理されていない…」
マクロ(VBA)が思ったように動かないとき、原因は 大きく3系統 に分かれます。 やっかいなのは、同じ「動かない」でも 直す場所がまったく違う ことです。
この記事は、
症状を見れば、3つのタイプのどれかに必ず絞れる
という 切り分け(問診)形式 でまとめています。 上から順に読まなくても、自分の症状の章にジャンプしてOKです。
💡 関連記事:
- Excelの主要エラー6種【症状→原因→解決の早見表】 ← セルに
#VALUE!など#で始まるエラー値 が出ているときはこちら(マクロの実行時エラーとは別物です)- 数式が計算されない・=SUMがそのまま表示される ← 数字が 文字列扱い(左寄せ・緑の三角)で、マクロの集計結果がおかしい場合の遠因はこちら
- Excelの時短ショートカット ← VBAエディタを開く
Alt + F11など、操作系ショートカットの補足
まずは症状で切り分け(あなたはどのタイプ?)
マクロのトラブルは、次の3タイプのどれかです。 自分の症状に当てはまる行から、該当する章へジャンプしてください。
| あなたの症状 | タイプ | 最短の直し方 |
|---|---|---|
| そもそも実行できない/ボタンが無い/開くと警告バーが出る | ① 実行できない・無効 | [開発]タブを表示・「コンテンツの有効化」または(ネット由来なら)ファイルのプロパティで「ブロック解除」・.xlsm で保存(環境と設定の問題) |
実行すると赤いエラーダイアログ(型が一致しません 等)が出て止まる | ② 実行時エラー | 「デバッグ」を押して 黄色い行 を読み、その行の変数・参照・対象セルを直す |
| エラーは出ないのに、結果のセル範囲がズレる/一部しか処理されない | ③ 結果がおかしい | 最終行を自動取得する・Option Explicit でタイプミスを防ぐ |
📌 ポイント: セルに
#VALUE!や#N/Aのように#で始まるエラー値 が出ているなら、それはマクロのエラーではありません。本記事ではなく Excelの主要エラー6種 を読んでください。本記事が扱うのは「マクロ(VBA)の動作そのもの」のトラブルです。
タイプ①は「そもそも動かせない」、タイプ②は「動かすと途中で止まる」、タイプ③は「最後まで動くのに結果が変」。 この3つの大きな違いを押さえると、迷わず正しい章にたどり着けます。
タイプ①:そもそもマクロが実行できない・無効になっている
一番多い入口です。多くの場合 コードは悪くなく、「環境・設定・保存形式」 の問題です。 サブ症状ごとに確認していきましょう。
[開発]タブが見当たらない
症状
- リボンに「開発」タブが無く、マクロのボタンや「Visual Basic」が見つからない
なぜ起きる
[開発]タブは Excel の 既定では非表示 です。最初から無いのが普通なので、自分で表示する必要があります。
確認方法
リボン上部のタブ(ホーム・挿入・ページレイアウト…)の並びに「開発」があるかを見ます。
解決方法
- 「ファイル」→「オプション」→「リボンのユーザー設定」 を開く
- 右側の一覧で 「開発」にチェック を入れて「OK」
これでリボンに「開発」タブが出ます。なお、VBAエディタ(コードを書く画面)は開発タブが無くても Alt + F11 で開けます。
マクロがブロックされる・警告バーが出る
症状
- ブックを開くと、上部に バー が出てマクロが実行できない
- マクロを実行しようとしても反応がない
なぜ起きる
マクロ付きブックは、Excelが安全のために既定でマクロをブロックします。これはウイルス対策のための正常な動作です。 ただし 出るバーには2種類あり、解除の方法がまったく違う ので、まず どちらのバーが出ているか を見分けてください。
ケースA:黄色い「セキュリティの警告」バー+「コンテンツの有効化」ボタンが出る場合
自分で作ったブックや社内で受け取ったブックなど、インターネット経由ではないファイル で、トラスト センターの既定設定(マクロを通知付きで無効)によりブロックされているケースです。
- 出どころが信頼できる場合のみ、黄色いバーの 「コンテンツの有効化」 ボタンを押すと、そのブックのマクロが有効になります
- 恒久的に設定を見直すなら 「ファイル」→「オプション」→「トラスト センター」→「トラスト センターの設定」→「マクロの設定」 から変更します
ケースB:赤い「セキュリティ リスク」バナー(「コンテンツの有効化」ボタンが無い)が出る場合
「Microsoft によりマクロの実行がブロックされました。このファイルのソースが信頼できないためです」のような 赤いバナー が出て、ボタンは「詳細情報」だけ、というケースです。これは インターネットからダウンロードしたファイル(メール添付やWebからの保存など、いわゆる Mark of the Web が付いたファイル)に対する、現行の Microsoft 365 の既定動作です。
このバナーには 「コンテンツの有効化」ボタンはありません。 黄色いバーをいくら探しても見つからないので、次の手順でファイル側のブロックを解除します(出どころが信頼できる場合のみ)。
- Excelをいったん閉じ、エクスプローラーでそのファイルを 右クリック → 「プロパティ」 を開く
- 「全般」タブの 下部の「セキュリティ」 にある 「許可する(ブロックの解除)」にチェック を入れて「OK」
- ファイルを開き直すと、赤いバナーが出なくなり、マクロを使えるようになります
💡 社内の共有フォルダなど決まった場所のブックを繰り返し使うなら、その場所を トラスト センターの「信頼できる場所」 に登録しておく方法もあります(毎回のブロック解除が不要になります)。
⚠️ 注意: 知らない人・出どころ不明のブックのマクロを安易に有効化したり、ブロックを解除したりしないでください。 マクロはファイルを削除したり外部と通信したりもできるため、悪意あるコードが仕込まれている可能性があります。中身が不安なときは、まず後述の「安全に扱う3つの習慣」のとおり、
Alt + F11でコードを確認してから判断しましょう。
保存したらマクロが消えた
症状
- 一度保存して開き直したら、書いたはずのマクロが消えている
なぜ起きる
通常の .xlsx 形式で保存すると、マクロ(VBA)は破棄されます。 .xlsx はマクロを保存できない形式だからです。
解決方法
マクロを残すには マクロ有効ブック .xlsm で保存します(バイナリ形式の .xlsb でも可)。
- 「ファイル」→「名前を付けて保存」
- ファイルの種類を 「Excel マクロ有効ブック (*.xlsm)」 にする
- 保存時に「次の機能はマクロなしのブックに保存できません」と聞かれたら 「いいえ」 を選び、改めて
.xlsm形式を選ぶ
📌 ポイント: タイプ①は「環境・設定・保存形式」の問題で、コード自体は正しいことが多いです。まず 「開発タブの表示」「マクロの有効化(黄色いバーは『コンテンツの有効化』/赤いバナーはファイルのプロパティで『ブロック解除』)」「
.xlsmで保存」 の3点を確認しましょう。ここを直すと、そのまま動くケースがよくあります。
タイプ②:実行するとエラーダイアログが出る(実行時エラー)
マクロを実行した瞬間に 赤い背景のエラーダイアログ が出て止まるケースです。これを「実行時エラー」と呼びます。
ダイアログには 実行時エラー '13': 型が一致しません のように 番号 と 日本語メッセージ が出ます。初心者がつまずきやすい代表3種を見ていきます。
📌 ポイント: 実行時エラーは「何行目で・何が」を教えてくれる親切なサインです。ダイアログの 「デバッグ」ボタン を押すと、止まった行が 黄色くハイライト されます。エラー番号を暗記するより、まず 黄色い行と日本語メッセージ を読むのが先決です。
「型が一致しません」(実行時エラー 13)
症状
実行時エラー '13': 型が一致しませんのダイアログが出る
なぜ起きる
数値を入れるべき変数に、文字列や空白 が入ったときに起きます。たとえばセルに「未定」「(空白)」のような 数字として読めない値 が入っていると、数値変数に代入できずエラーになります。「100円」のように 末尾に単位が付いた値 も、文字列として扱われると同じくエラーになります。
確認方法
「デバッグ」を押し、黄色い行で どのセル・どの変数を計算しようとしているか を見ます。その対象セルの中身を確認します。
Before(このエラーが出る書き方)
Sub 合計する()
Dim n As Long
' A1 に「未定」のような数字として読めない文字が入っていると、
' 数値変数 n に代入できず 実行時エラー 13(型が一致しません)になる
n = Range("A1").Value
MsgBox n
End Sub
After(直した動く版)
Sub 合計する()
Dim n As Long
' IsNumeric で「数値として扱えるか」を先に確認してから代入する
If IsNumeric(Range("A1").Value) Then
n = Range("A1").Value
MsgBox n
Else
MsgBox "A1 が数値ではありません: " & Range("A1").Value
End If
End Sub
📌 補足:
IsNumericは「未定」のような文字列にはFalse(数値ではない)を返すので、上のように安全に弾けます。ただし 「100円」のように単位が付いた文字列は、環境(地域・通貨の設定)によってTrueと判定されることがあります。 確実を期すなら、IsNumericで大まかに弾いたうえで、想定する書式の値かどうか(例: 全角・単位・空白が混ざっていないか)も合わせて確認しておくと安心です。
数字に見えても 文字列扱い(左寄せ・緑の三角)だと計算がズレることがあります。詳しくは 数式が計算されない・=SUMがそのまま表示される も参照してください。
「オブジェクトが必要です」(実行時エラー 424)
症状
実行時エラー '424': オブジェクトが必要ですのダイアログが出る
なぜ起きる
Range や Worksheet などの オブジェクトを指定すべき場所 に、未設定の変数やスペルミスの名前を書いたときに起きます。
確認方法
黄色い行のオブジェクト名・変数名のスペルを確認します。
Before(このエラーが出る書き方)
Sub 値を入れる()
Dim ws As Worksheet
' ws に何もセットしていないのに使おうとしているため
' 実行時エラー 424(オブジェクトが必要です)になる
ws.Range("A1").Value = 100
End Sub
After(直した動く版)
Sub 値を入れる()
Dim ws As Worksheet
' Set でオブジェクト(シート)を変数に割り当ててから使う
Set ws = Worksheets("Sheet1")
ws.Range("A1").Value = 100
End Sub
「インデックスが有効範囲にありません」(実行時エラー 9)
症状
実行時エラー '9': インデックスが有効範囲にありませんのダイアログが出る
なぜ起きる
存在しないシート名 を指定したり、配列の範囲外を参照したときに起きます。よくあるのは、シート名が「集計」なのにコードでは Worksheets("Sheet1") と書いているケースです。
確認方法
黄色い行で指定しているシート名・添字が、実際に存在するか を確認します。シート名は画面下のシート見出しと 完全一致(全角・半角や空白も)している必要があります。
Before(このエラーが出る書き方)
Sub シートを選ぶ()
' 実際のシート名が「集計」なのに "Sheet1" を指定しているため
' 実行時エラー 9(インデックスが有効範囲にありません)になる
Worksheets("Sheet1").Activate
End Sub
After(直した動く版)
Sub シートを選ぶ()
' 実在するシート名に合わせる(下のシート見出しと完全一致させる)
Worksheets("集計").Activate
End Sub
📌 ポイント: 実行時エラーの番号とメッセージは決まっています。13=型が一致しません/424=オブジェクトが必要です/9=インデックスが有効範囲にありません。番号を取り違えると原因も取り違えます。共通の直し方は 「デバッグ → 黄色い行を読む → その行の変数・参照・対象セルを疑う」 です。なお、セルに出る
#VALUE!などの#エラー値はこれとは別物で、Excelの主要エラー6種 の領域です。
タイプ③:動くけれど結果がおかしい(範囲ズレ・変数のミス)
エラーダイアログは出ず、最後まで動くのに 結果が変 なケースです。「静かなバグ」とも言え、気づきにくいのが厄介です。
対象範囲がズレている
症状
- 一部の行しか処理されない/見出し行まで処理してしまう/空行で止まる
なぜ起きる
Range("A1:A10") のように 行数をべた書き していると、データが増減したときに範囲がズレます。データは増えるのに、コードの範囲は固定のままだからです。
解決方法
データの最終行を 自動で取得 して、その分だけ処理するようにします。最終行は次の書き方で取れます。
Sub 最終行を取得()
Dim lastRow As Long
' A列の一番下のセルから上方向(xlUp)に詰めて、データのある最終行を取得する
lastRow = Cells(Rows.Count, 1).End(xlUp).Row
MsgBox "A列の最終行は " & lastRow & " 行目です"
End Sub
Cells(Rows.Count, 1) は「A列(1列目)の一番下のセル」、.End(xlUp) は「そこから上に詰めて最初にデータがあるセル」、.Row で「その行番号」が取れます。固定の 10 の代わりに、この lastRow を使えば範囲ズレを防げます。
Option Explicit が無く、変数名のタイプミスに気づけない
症状
- エラーは出ないのに、計算結果が 0 や空になる
なぜ起きる
VBAは既定では、宣言していない変数名でもその場で勝手に作ってしまいます。そのため 変数名を打ち間違えても気づかず、空の変数として扱われて静かに誤動作します。
解決方法
モジュールの先頭に Option Explicit を1行書きます。これで「宣言していない変数を使うとコンパイル時にエラーで止まる」ようになり、タイプミスをその場で発見できます。
Before(タイプミスに気づけない)
Sub 合計を表示()
Dim goukei As Long
goukei = 100
' 変数名を「gokei」と打ち間違えているが、Option Explicit が無いと
' エラーにならず、空(0)として扱われて MsgBox は 0 を表示してしまう
MsgBox gokei
End Sub
After(先頭の Option Explicit で打ち間違いを検出)
Option Explicit ' ← モジュールの一番上に書く
Sub 合計を表示()
Dim goukei As Long
goukei = 100
' 「gokei」は宣言されていないため、実行前のコンパイルで
' 「変数が定義されていません」と止まり、タイプミスに気づける
MsgBox goukei
End Sub
数値のはずが文字列だった
セルの数字が 文字列扱い(左寄せ・緑の三角)だと、マクロの集計が合計に入らず結果がズレます。これは数式でも同じ現象が起きるので、原因と直し方は 数式が計算されない・=SUMがそのまま表示される を参照してください。
📌 ポイント: 「エラーが出ない=正しい」ではありません。 タイプ③は最後まで動くぶん見つけにくいので、処理の前後でセルを目視で照合 し、
Option Explicitで「静かなバグ」を防ぎましょう。
例:重複を消すマクロの Before / After
たとえば、A列に重複のある名簿から重複を取り除くケースを考えます。処理前は次のように、同じ値(りんご・みかん)が複数行に並んでいます。

このA列に対して、Excel標準の「重複の削除」と同じ結果を VBA で行うと、次のコードになります。
Sub 重複を削除()
Dim lastRow As Long
' A列の最終行を自動取得(行数べた書きを避ける)
lastRow = Cells(Rows.Count, 1).End(xlUp).Row
' 1行目を見出しとして扱い、A列の重複行を1件だけ残して削除する
' Columns:=1 … 1列目(A列)の値で重複を判定
' Header:=xlYes … 先頭行は見出しなので処理対象から外す
Range("A1:A" & lastRow).RemoveDuplicates Columns:=1, Header:=xlYes
End Sub
実行後はA列が一意になり、りんご・みかん・ぶどう の3件だけが残ります。

⚠️ 注意: 行や重複の 削除はやり直しがききにくい操作 です。マクロでの変更は
Ctrl + Z(元に戻す)で戻せないことが多い ため、実行前に必ずブックをコピー(バックアップ) してから試してください。また、上の例のように 処理する列・範囲を限定 し、シート全体を無差別に消すようなコードは避けましょう。
マクロを安全に扱うための3つの習慣
マクロは便利な反面、ファイルを書き換える力を持ちます。次の3つを習慣にすると安心です。
- 出どころ不明のマクロは、実行前に中身(コード)を確認する
ブックを開いて
Alt + F11でVBAエディタを開き、何をするコードかを読んでから実行します。削除・上書き・外部通信のような操作が含まれていないかを確認しましょう。 - 削除・上書き系のマクロは、必ずバックアップを取ってから実行する
重複削除や行削除など、データを変えるマクロは 実行前にブックをコピー しておきます。マクロでの変更は
Ctrl + Zで戻せないことが多い ためです。 - マクロ有効ブックは
.xlsmで保存し、ファイル名でわかるようにする.xlsxだとマクロは消えます。.xlsmで保存し、ファイル名にも目印を付けておくと、マクロ入りブックだと一目で判別できます。
📌 ポイント: トラブルの多くは「他人が作った/もらったブック」で起きます。出どころ・中身・保存形式の3点を最初に押さえておくと、後からの「なぜ動かない?」と「うっかり消した」の両方を減らせます。
まとめ:症状→原因→直し方の早見表
まずはこのフローで、自分がどのタイプかを判断してください。
| タイプ | 症状 | 原因 | 直し方 |
|---|---|---|---|
| ① 実行できない・無効 | 実行できない/ボタンが無い/警告バーが出る | 開発タブ非表示・セキュリティでブロック・.xlsx 保存でマクロ消失 | [開発]タブを表示・黄色いバーは「コンテンツの有効化」/赤いバナー(ネット由来)はファイルのプロパティで「ブロック解除」・.xlsm で保存 |
| ② 実行時エラー(13/424/9) | 赤いエラーダイアログが出て止まる | 13=型不一致/424=オブジェクトが必要/9=範囲外(シート名違い等) | 「デバッグ」で黄色い行を読み、変数・参照・対象セルを直す |
| ③ 結果がおかしい | エラーは出ないが範囲ズレ・一部しか処理されない | 行数べた書き/Option Explicit 無しのタイプミス/数字が文字列 | 最終行を自動取得・Option Explicit・文字列の数字を数値化 |
(別物)セルの #〇〇 | #VALUE! #N/A などセルに出るエラー値 | 数式・関数側のエラー(マクロではない) | Excelの主要エラー6種 を参照 |
タイプ①は「動かせない」、②は「途中で止まる」、③は「動くのに結果が変」。 ここを取り違えなければ、直し方も自然と決まります。
よくある質問
Q. エラーダイアログで「終了」と「デバッグ」どっちを押せばいい?
A. まず 「デバッグ」 を押してください。止まった行が黄色くハイライトされ、原因のヒントになります。中身を確認して直してから、改めて実行し直すのが安全です。何もせず「終了」を押すと、どこで止まったか分からないまま終わってしまいます。
Q. マクロを実行したら、元に戻せますか?
A. マクロでの変更は Ctrl + Z(元に戻す)で戻せないことが多い です。とくに削除・上書き系を実行すると取り消せません。重要なデータを扱うマクロは、実行前にブックをコピー(バックアップ) してから試してください。
Q. .xlsm と .xlsx、どちらで保存すればいい?
A. マクロを残すなら .xlsm(マクロ有効ブック) です。.xlsx で保存するとマクロは破棄されて消えます。保存時に「マクロなしのブックに保存できません」と聞かれたら「いいえ」を選び、.xlsm を選んでください。
Q. Mac でも同じですか?
A. 考え方(3タイプの切り分け・実行時エラーの読み方・.xlsm 保存)は 共通 です。VBAエディタも Mac で使えます。ただし、メニューの場所やセキュリティ設定の名称・位置は Windows とバージョンによって異なる ため、画面の表記に合わせて読み替えてください。
Q. 3タイプを試しても直りません
A. 記事の手順を試しても直らない場合、特定のコードや構成だけで起きるレアケースかもしれません。AIサポートで、エラーメッセージやコードを見せながら対話的に原因を切り分けてみてください。
関連記事
- ピボットテーブルが思いどおりに集計できない【合計・個数・比率・更新を症状別に】
- 数式が計算されない・=SUMがそのまま表示される【3つの原因で切り分け】
- 絶対参照と相対参照の使い分け【$ と F4 キーで数式コピーがズレない】
- COUNTIF / COUNTIFS が動かない6つの原因と解決法【上から順に試せばOK】
- Excelショートカット厳選20選【明日から作業が倍速になる】
- IF関数の入れ子から卒業する5つの方法【パターン別に使い分け】
- INDEX+MATCH で VLOOKUP の弱点を克服する4つの場面【コピペで使える】
- SUMIF / SUMIFS が動かない6つの原因と解決法【上から順に試せばOK】
- IFERROR の使い方と落とし穴【エラーを隠す前に読む完全ガイド】
- Excelの主要エラー6種【症状→原因→解決の早見表】
- VLOOKUPで#N/Aが出る5つの原因と解決法【上から順に試せばOK】