サイトアイコン マメBlog

「マクロが動かない!エラーも出ない!?」原因と5つの解決法をご紹介

 

「マクロを実行したのに何も起こらない…」「エラーメッセージも出ないから原因が分からない…」そんな経験はありませんか?

 

実は、マクロが動かないのにエラーが表示されない問題は、VBA初心者から上級者まで多くの方が遭遇する厄介なトラブルです。

 

この記事では、エラーが出ないマクロの不具合について5つの主要原因と具体的な解決法を分かりやすく解説。

デバッグの基本手順から実際のコード例まで実践的な内容をお届けするので、マクロが動作しない問題でお困りの方は是非参考にしてみてください。

 

マクロが動かない「エラーも出ない」状況とは?よくある症状を解説

マクロが動かないのにエラーメッセージも表示されない状況は、実はよくある問題です。

通常のプログラムエラーと違って、何が原因なのか分からず困ってしまう方が多いのではないでしょうか。

 

このような「無反応」状態には主に3つのパターンがあり、それぞれ対処法が異なります。

 

VBAコードは実行されているように見えても、実際には期待通りに動作していないケースがほとんど

まずは自分のマクロがどの症状に当てはまるかを確認することで、効率的な解決に繋がります。

 

マクロが途中で止まるのにエラーメッセージが表示されない

マクロが途中で処理を停止してしまうのに、エラーダイアログが出ない現象は非常に厄介です。

 

この問題の原因は、

コード内で条件分岐や繰り返し処理が想定通りに動作していないことがほとんど

です。

 

繰り返し処理で無限ループが発生してしまうサンプルコードがこちら

Sub TestMacro()
Dim i As Integer
i = 1
Do While i > 0
Cells(i, 1).Value = "テスト"
' i の値が変更されないため無限ループ
Loop
End Sub

 

このコードでは、変数iの値が変更されないため、条件が永続的に満たされ続けてしまいます。

 

マクロは動作しているように見えますが、実際には処理が完了せず、Excelが応答しなくなる状態です。

 

実行ボタンを押しても何も起こらない現象

実行ボタンをクリックしても全く反応がない場合、最も多い原因はマクロのセキュリティ設定です。

 

Excelのマクロ機能が無効になっていると、コードは実行されません。

また、

マクロ名の重複や、プロシージャ名の誤りも不動作の原因となります。

' 正しくないプロシージャ名の例
Private Sub Worksheet_Change() ' 引数が不足
MsgBox "セルが変更されました"
End Sub

 

' 正しいプロシージャ名
Private Sub Worksheet_Change(ByVal Target As Range)
MsgBox "セルが変更されました"
End Sub

 

イベントプロシージャでは引数の指定が必須です。

引数が不足していると、マクロは実行されません。

 

このような場合、エラーメッセージも表示されないため原因の特定が困難になります。

 

マクロは動くが期待した結果にならない場合

マクロが実行されているのに、期待した結果が得られない場合は、データ型の問題や計算ロジックの誤りが考えられます。

 

特に、文字列と数値の混在や、日付の処理が正しいかチェックしましょう。

Sub CalculateSum()
Dim total As Double
Dim i As Integer

For i = 1 To 10
' セルの値が文字列の場合、計算が正しく行われない
total = total + Cells(i, 1).Value
Next i

MsgBox "合計: " & total
End Sub

 

このコードでは、

セルに文字列が入っている場合、数値として計算されず結果が0

になってしまいます。

 

Val関数を使用して明示的に数値変換を行うことで正しい計算が可能です。

 

マクロ動かない原因を特定する「デバッグ」の基本手順

マクロが正しく動作しない原因を特定するには、デバッグ機能を活用することが最も効果的です。

VBAエディタには強力なデバッグツールが搭載されており、プログラムの実行過程を詳細に確認できます。

 

デバッグを行うことで、

コードのどの部分で問題が発生しているかを正確に把握し、効率的な問題解決が可能

です。

 

デバックって難しそう。。。

と感じるかもしれませんが、これから紹介する基本的なデバッグ手順さえ把握すればVBA初心者でも簡単に問題箇所を特定できるようになります。

 

ステップイン(F8キー)で1行ずつ実行して問題箇所を発見

ステップイン機能は、

マクロを1行ずつ実行しながら動作を確認するデバック方法

です。

 

VBAエディタで、確認したいプロシージャ内にカーソルを合わせてF8キーを押すと、

黄色でハイライトされた行が順番に実行

されます。

 

こんな感じ

 

この方法により、どの行で処理が止まるか、変数の値がどのように変化するかを詳細に観察できます。

Sub DebugExample()
Dim name As String
Dim age As Integer

name = "田中太郎" ' F8でここまで実行
age = InputBox("年齢を入力してください") ' F8でここまで実行
MsgBox name & "さんは" & age & "歳です" ' F8でここまで実行
End Sub

 

ステップイン実行中は、変数の値をリアルタイムで確認できるため、期待した値が格納されているかを確認できます。

 

これにより、計算ミスや条件分岐の問題を早期に発見できます。

 

ブレークポイントで任意の位置まで実行させる方法

ブレークポイントは、

特定の行で処理を一時停止させる機能

です。

 

調べたい行の左端をクリックすると赤い丸が表示され、その位置でマクロが停止します。

 

ガッツポーズの人

長いコードのデバッグに非常に有効

 

複数のブレークポイントを設定することで、プログラムの実行を段階的に確認できます。

Sub LongProcess()
Dim i As Integer

For i = 1 To 1000
Cells(i, 1).Value = i * 2 ' ここにブレークポイント
If i Mod 100 = 0 Then
DoEvents ' ここにもブレークポイント
End If
Next i

MsgBox "処理完了"
End Sub

 

ブレークポイントを設定することで、

繰り返し処理の途中で値を確認したり、条件分岐が正しく動作しているかを検証

することが可能。

 

 

F5キーで次のブレークポイントまで実行を継続できるため、効率的なデバッグが可能です。

 

イミディエイトウィンドウで変数の中身を確認するテクニック

イミディエイトウィンドウは、

デバッグ中に変数の値を確認する、簡単なコードを実行する

ことができます。

 

Ctrl+Gキーで表示され、「?変数名」と入力することで、現在の変数の値を確認できます。

また、

変数の値を変更することも可能で、デバッグ作業を効率化できます。

 

Sub TestVariables()
Dim userName As String
Dim userAge As Integer
Dim isValid As Boolean

userName = "山田花子"
userAge = 25
isValid = True

' イミディエイトウィンドウで以下を実行
' ?userName → "山田花子"
' ?userAge → 25
' ?isValid → True
' userName = "佐藤次郎" ' 値の変更も可能
End Sub

 

イミディエイトで結果を表示する様子がこちら

イミディエイトウィンドウでは、Debug.Print文を使って処理の流れを追うこともできます。

複雑な計算処理や条件分岐の動作確認に非常に有効です。

 

エラーが出ないマクロが動かない5つの原因と解決法

エラーメッセージが表示されないマクロの不具合には、主に5つの原因が考えられます。

 

これらの原因を順番に確認していくことで、多くの問題を解決できます。

 

【原因1】マクロの設定が無効になっている

マクロが全く動作しない最も一般的な原因は、

Excelのマクロ実行設定が無効になっていること

です。

 

セキュリティ上の理由から、デフォルトでマクロが無効に設定されている場合があります。

「ファイル」→「オプション」→「トラストセンター」→「トラストセンターの設定」→「すべてのマクロを有効にする」

 

マクロを有効にする手順がこちら

 

 

 

 

 

上記の方法で「マクロを有効」にできます。

 

そもそも現在マクロが有効なのか、無効なのかを調べる方法が知りたい!

という方もいらっしゃいますよね。

 

そんな方は

下記のサンプルコードをVBAエディタで実行

してください。

Sub TestMacroSecurity()
' このマクロが実行されない場合、セキュリティ設定を確認
MsgBox "マクロが正常に実行されました"
End Sub

 

正常に実行されれば「マクロは有効になっている」ということです。

 

また、

ファイルを開いた際に「セキュリティの警告」バーが表示された場合は、「コンテンツの有効化」ボタンをクリックする必要があります。

マクロ有効ブック(.xlsm)として保存されているかも重要なポイントです。通常のExcelファイル(.xlsx)ではマクロは実行されないため、ファイル形式の確認も忘れずに行いましょう。

 

【原因2】オブジェクトやセル範囲の指定ミス

オブジェクトの参照エラーや、存在しないセル範囲への参照は、エラーメッセージが出ない場合が多いので注意が必要です。

特に、ワークシート名やセル範囲の指定で、大文字・小文字の区別や、全角・半角の違いによるミスが頻発します。

Sub ObjectReferenceError()
Dim ws As Worksheet

' 間違った例:シート名が存在しない場合
Set ws = Worksheets("Sheet1") ' 実際のシート名は「シート1」

' 正しい例:シート名を正確に指定
Set ws = Worksheets("シート1")

' セル範囲の指定ミス
ws.Range("A1:A10").Value = "テスト" ' 正しい
' ws.Range("A1:A10").Value = "テスト" ' A1とA10の間は「:」(コロン)
End Sub

 

このような参照エラーを防ぐためには、

コード内でオブジェクトの存在確認を行うか、エラーハンドリングを実装することが重要

です。

 

また、セル範囲の指定では、R1C1形式や、Cells(行, 列)形式を使用することで、より確実な参照が可能になります。

 

【原因3】変数の型不一致や初期化不足

データ型の不一致や、変数の初期化不足は、マクロが予期しない動作をする原因となります。

特に、数値として扱いたいデータが文字列として認識されている場合や、日付の形式が異なる場合に注意しましょう。

Sub DataTypeError()
Dim num1 As Integer
Dim num2 As String
Dim result As Integer

num1 = 10
num2 = "5" ' 文字列として定義

' 型不一致でエラーが発生する可能性
result = num1 + num2

' 正しい方法:明示的な型変換
result = num1 + CInt(num2) ' CInt関数で数値に変換

MsgBox "計算結果: " & result
End Sub

 

変数の初期化不足も問題となります。

特に、配列や文字列変数を使用する際は、適切な初期化を行わないと、予期しない結果が生じる可能性があります。

Option Explicit文をモジュールの先頭に記述することで、変数の宣言漏れを防ぐことができます。

 

関連記事「変数の型を調べる方法」では、取得した値がどの型で認識されているのかを調べる方法が紹介されています。

 セルに入力されたテキストが日付の場合〇〇して、数値の場合××する。というVBAを作りたい。こんな問題を解決してくれるのがVarType関数です。 VarType関数を使えば、セルに入力されたテキストが「100」は整数、「こんにちは」は文字列、、「5月20日」は日付と判別するなんてことができるようになります。 業務内容に合わせてセルに入力されたテキストが日付だったら1週間後の日付を表示する、数値だったらフォントを赤色にするといった処理に応用すればエクセル業務の効率を飛躍的にアップさせることが可能です。&nbs...
【VBA VarType】変数の型を調べる方法!5分で理解できる実践テクニック - mamemametochan.com

数字と文字列を組み合わせる、日付と文字列を組み合わせる、という場面でよく活用されます。

併せてチェックしてみてください。

 

【原因4】ファイルパスや参照先の問題

外部ファイルを参照するマクロでは、

ファイルパスの指定ミスが原因で動作しないこと

があります。

 

特に、絶対パスで指定されたファイルが移動された場合や、ネットワークドライブへのアクセス権限がない場合に問題が発生します。

Sub FilePathError()
Dim filePath As String
Dim wb As Workbook

' 問題のあるパス指定(絶対パス)
filePath = "C:\Users\Taro\Desktop\data.xlsx"

' ファイルの存在確認
If Dir(filePath) = "" Then
MsgBox "ファイルが見つかりません: " & filePath
Exit Sub
End If

' 正しい方法:相対パスの使用
filePath = ThisWorkbook.Path & "\data.xlsx"
Set wb = Workbooks.Open(filePath)
End Sub

 

ファイルパスの問題を解決するには、相対パスの使用や、ファイル選択ダイアログの実装が効果的です。

また、ファイルを開く前に、Dir関数を使用してファイルの存在確認を行うことで、より堅牢なコードを作成できます。

 

関連記事「Dir関数を使ったファイル検索」では、Dir関数の基本的な使い方から応用方法まで詳しく紹介されています。

 

 フォルダ内にある全てのファイルをまとめて操作したい!大量にデータから特定のデータだけを抽出したい!! こんな処理はVBAでDir関数を使えば自動化できます。 Dir関数を上手に使いこなせば、以下のような処理が可能になります。 フォルダ内の写真をまとめて貼り付ける フォルダ内のエクセルファイルの名前や更新日を一覧表にする フォルダ内の1年以上前のデータをまとめて削除する 写真帖作成作業にDir関数を使ったマクロを導入することで、半日かかっていた作業が、わずか30分で完了するようになりました...
【VBA】Dir関数で作業効率3倍アップ?ファイル検索とフォルダ操作の完全攻略法 - mamemametochan.com

 

大量のファイルをまとめて操作する方はDir関数の使い方をマスターしておきましょう。

 

【原因5】Officeアップデート後のマクロブロック

Microsoft Officeのアップデート後に、マクロが動作しなくなる場合があります。

これは、セキュリティ強化により、インターネットからダウンロードしたファイルや、信頼できない場所からのマクロ実行が制限されるためです。

Sub CheckMacroSecurity()
' マクロのセキュリティレベルを確認
Select Case Application.AutomationSecurity
Case msoAutomationSecurityLow
MsgBox "セキュリティレベル: 低"
Case msoAutomationSecurityByUI
MsgBox "セキュリティレベル: UI設定に従う"
Case msoAutomationSecurityForceDisable
MsgBox "セキュリティレベル: 強制無効"
End Select
End Sub

 

この問題を解決するには、

ファイルのプロパティから「ブロックの解除」を行うか、信頼できる場所にファイルを移動させる

必要があります。

 

また、デジタル署名を追加することで、マクロの信頼性を高めることも可能です。企業環境では、IT管理者と連携して、適切なセキュリティポリシーを設定することが重要です。

 

 

VBA初心者が効率化マクロを導入する方法

 

VBAなんて扱ったことないけど、業務内容に合わせた効率化マクロを導入したい!

 

こんな問題を解決する方法がこちら

 

VBAスキルを身に着ける前は、「マクロ開発の外注」で対応していましたが、

今では自分で効率化マクロをサクッと導入しちゃいます。

 

完成されたマクロを使ってエクセル業務を処理する

作業効率が2倍以上アップ!!

便利すぎて自分でもマクロを設定したいと考え始める

参考書やネットの情報でVBAスキルを身に付ける

マクロ開発を代行できる程のスキルを習得

 

 

VBAは

他のプログラミングに比べて参考書やネットで紹介されている情報量が多いので初心者でも導入しやすい

という特徴があります。

 

外注した方が楽だけど、費用がかかる。自分で導入すれば費用は0円だけど時間がかかる。。

いずれにせよ、効率化マクロを導入できれば作業効率が飛躍的にアップするのは間違いありません。

 

あなたに合った方法で導入しちゃいましょう。

 

マクロ開発を外注に依頼する

マクロ開発を外注に依頼する方法は

VBAを全く扱えない方でもエクセル作業を自動化できる最も簡単な方法

です。

 

「こんなデータ抽出作業を自動化したい」「作った資料を自動的にPDFで保存したい」「決まった様式に写真を自動で貼り付けたい」

こんな感じで実現したい内容を依頼するだけで業務内容に合ったマクロを開発してくれます。

 

ガッツポーズの人

完成まで本業に集中できるので効率的

 

 

デメリットは、費用がかかることだけ。

開発内容、依頼先によってかかる費用は大きく異なります。

私が会社員の頃利用していた業者さんは1マクロあたり2万円~3万円の費用がかかりました。

 

疑問がある人

ちょっと高くない。。。

 

ちなみに、マメBlogでもエクセルマクロ開発代行サービスを承っています。

開発内容の確認、VBAコードの設定、動作確認後の調整、など全ての工程を私(マメ父ちゃん)が行っているので、

費用が安い!スピード納期!!

でやらせてもらっています。

 

ほとんど独学で身に付けたVBAスキルなので、内容によっては開発できないこともあるのでご了承ください。

 

ご相談、見積もり依頼は完全無料ですので気になる方は下記のリンクよりお問合せ下さい。

 

 

マクロが設定されたエクセルファイルをダウンロードする

VBA初心者でも『マクロが設定されたエクセルファイルをダウンロード』することで、

すぐに使っているエクセルにマクロを導入することができます。

 

VBA初心者でも、「形になっているマクロをゲットできる」「費用が安い」

というメリットがあります。

しかし、

想定するマクロを見つけることが難しい、業務内容に合わせるためのアレンジが必要

というデメリットもあります。

 

ガッツポーズの人

お目当てのマクロが見つかればラッキー

 

個人ブログやファイルを販売できるサイト「note」や「Tips」ではいろんなマクロの情報が掲載されているので是非参考にしてみてください。

 

今までマメBlogで受注した効率化マクロを下記のnoteで掲載していますので併せてチェックしてみてください。

 

 

 

参考書やネットでVBAスキルを身に付ける

先程も紹介しましたが、

VBAは他のプログラミングに比べて参考書やネットで紹介されている情報量が多いので初心者でも導入しやすい

プログラミングです。

 

言い換えると、

情報量が豊富なので自分で勉強できちゃう

ということです。

 

私のVBAスキルはほとんど独学で身に付けたもので、

考えた処理のほとんどをVBAで表現できるレベルにまで到達した!

と思っています。

 

私の作ったマクロをプロのプログラマーが見れば、

お前の書くコードはインチキだ!「変数の宣言」とか「引数」を正しく使えよ!!

と感じるはずです。

 

でも、

私からすればどうでもいい!!!想定した内容を正しく処理できればよくないですか!?

 

独学であっても『写真を貼り付けるマクロ』『全てのシートをPDF出力するマクロ』『連番を振るマクロ』など、

業務内容に合ったマクロを開発できるようになれます。

 

独学でVBAスキルを身に付けるコツは、

エラーが発生してもいいからひたすらコードを書く、なんでもいいからエクセル作業をマクロ化してみる

です。

 

とは言っても、全くの知識0の方は何をすればいいかわからないですよね。

 

VBA知識0の初心者の方は、参考書『たった1秒で仕事が片づくExcel自動化の教科書【増強完全版】』を読んでみてください。

 

VBAの知識0の方でもすいすい読み進められる内容になっています。

やさしい内容にも関わらず「え!!VBAを使えばこんなことできるの!?」と感動すると思います。

 

実際に私はこの参考書を読んでからVBAの勉強を始めました。

 

ひらめく人

VBA学習スタートのきっかけをくれた参考書


 

 

VBAの魅力を発見した後は、

ひたすら自動化したい内容のコードを書くだけ

です。

 

【マクロ 動かない】【マクロ エラーが出る】でネット検索すれば、問題を解決する方法がすぐにゲットできるはずです。

 

実現したい処理に向かって、「調べる→書いてみる→エラーを改善する→調べる」を繰り返していると

自然といろんなマクロが作れるようになっているはずです。

 

VBAに興味が湧いてきたという方は今からVBA学習をスタートさせちゃいましょう。

モバイルバージョンを終了