【VBA】エラーで心が折れそうなあなたへ。デバッグの基本と「よくあるエラー」対処法

【業務効率化】VBA
スポンサーリンク

こんにちは!ぐーです。
いつもブログをご覧いただき、ありがとうございます!

VBAを学び始めたばかりの頃、あのエラーメッセージが出るたびに「うわっ!」と声が出て、PCを閉じたくなった経験はありませんか?

  • 「何が悪いのか全く分からなくて、時間だけが過ぎていく…」
  • 「私、やっぱりプログラミング向いてないかも…」

そんなふうに落ち込んでしまう気持ち、よくわかります。私も最初はそうでした。

でも、安心してください。エラーは「あなたの才能がない」という宣告ではありません。

この記事では、デバッグ(ミスの修正)の基本技術と、初心者が必ず出くわす「3大エラー」の正体を解説します。

これを読めば、エラー音が少しだけ怖くなくなりますよ。

【業務効率化】VBAの記事を見る

🚨 なぜVBAはエラーを出すのか?(それは「警告」ではなく「道しるべ」)

まず、誤解を解いておきたいのですが、エラーは「あなたを攻撃している」のではありません。

VBA(というかPC)は、非常に素直ですが、同時に「融通がきかない」のです。

あなたが書いたコード(命令書)を上から順番に読んだ結果、

  • 「ご主人様、この命令書のここ、意味が分かりません!」
  • 「『あのシート』って言われても、そんな名前のシートありませんよ!」

と、律儀に「分からない場所」を教えてくれているだけなのです。

🛠️ これだけは覚えたい!デバッグの「3種の神器」

エラーの原因を探る(デバッグする)ために使うものを3つ紹介します。

1. ステップ実行 (F8キー)

最強の武器です。 これさえあれば、VBAの9割はデバッグできます。

VBAエディタ(コードを書く画面)で F8キー を押すと、コードを1行ずつ実行できます。

黄色いハイライトが「今、ここを実行しますよ」と教えてくれます。

F8を連打していき、エラーが出た瞬間に止まった行が、直接的な原因です。

でも1行1行進むので、毎回使うにはちょっと手間なんですよね…。

2. イミディエイトウィンドウ (Ctrl + G)

「今、この変数の中身はどうなってる?」を裏で確認したい時に使います。

VBAエディタで Ctrl + G を押すと下に出てくる「イミディエイト」という窓。

コードの中に Debug.Print 変数名 と書いておくと、F8でその行を通過したときに、イミディエイトウィンドウにその時点の中身が出力されます。

Sub DebugPrintExample()
    Dim i As Integer
    For i = 1 To 3
        ' ↓↓↓ これを書いておく ↓↓↓
        Debug.Print "現在のiの値: " & i
    Next i
End Sub


3. MsgBox

F8やイミディエイトウィンドウにまだ不慣れな人におすすめの方法です。

怪しいと思う場所の手前に、中身を見たい変数を MsgBox で表示させるだけ。

Sub MsgBoxDebug()
    Dim sheetName As String
    sheetName = "集計"
   
    MsgBox "今から " & sheetName & " を処理します" ' ← 本当に "集計" になってるか確認!
    Worksheets(sheetName).Select
End Sub


😱 これが出ても焦らない!初心者が必ずハマる「3大エラー」

ここからは、初心者が「絶対に見ることになる」代表的なエラーと、そのチェックポイントを紹介します。これを知っておくだけで、解決スピードが倍になります!

① 実行時エラー 9「インデックスが有効範囲にありません」

【意味】
「指定された名前のシートやブックが見つからないよ!」と言っています。

【チェックポイント】

  • コードに書いたシート名(例:”Sheet1″)と、実際のシート名が違っていませんか?
  • 「全角・半角」や「スペース」が混ざっていませんか?(例:”集計” と “集計 ” は別物です!)
  • そのブック自体が開かれていますか?

② 実行時エラー 13「型が一致しません」

【意味】
「数字を入れる箱に、文字を入れようとしてない?」という指摘です。

【チェックポイント】

  • 計算しようとしているセルに、「N/A」などのエラー値や文字が入っていませんか?
  • 数字(Integer)として宣言した変数に、文字(String)を代入していませんか?

③ 実行時エラー 1004「アプリケーション定義またはオブジェクト定義のエラーです」

【意味】
VBA界で最も頻発する、ちょっと不親切なエラーです。「何かがおかしい」という広い意味で使われますが、大抵はセルの指定ミスです。

【チェックポイント】

  • Range(“A1”) と書いた時、意図しないシートがアクティブになっていませんか?
  • 存在しないセル番地(例:マイナスの行番号など)を指定していませんか?
  • 隠れている(非表示の)シートを選択しようとしていませんか?

🚀 まとめ:エラーを乗り越えた先に「自動化」の道がある

VBAのエラーメッセージは、決して私たちを挫折させるためにあるのではありません。

「どこを間違えているか」を教えてくれるちょっと手のかかるパートナーです。

  1. F8 で1行ずつ実行し、どこで止まるか確認する。
  2. 止まった行の エラーメッセージ を読む(上記の3大エラーと照らし合わせる)。
  3. Debug.PrintMsgBox で 変数の「中身」 を確認する。

この3ステップで、ほとんどのエラーは解決できます。

どうしても解決できない時は、Googleで「VBA エラー番号 エラーメッセージ」で検索してみてください。世界中の先輩たちが、同じエラーと戦った記録が必ず見つかります。

エラーを恐れず、楽しんでみてください!

【業務効率化】VBAの記事を見る


VBAを独学で学び、業務自動化に5年以上携わってきた私が、「本当に実務で役立った!」と感じた2冊を厳選して紹介します。 もう本選びで失敗したくない方は、ぜひ参考にしてみてください。

この記事を書いた人
ぐー

手取り15万円の会社員でも、年間100万円以上の節約・資産管理・スキルアップで新NISAで年間360万円投資し、iDeCoもフル活用しています。日商簿記3級持っています。

このブログでは、私が実践してきた節約術やリアルな資産運用、稼ぐ力を高めるITスキルについて発信しています。

生活を豊かにしたくて、高配当株投資で年間配当金60万円をめざしています。現在は年間配当金25万円以上達成!

ゲーム・漫画・アニメなどが好きです。
一緒に資産形成をがんばりましょう!
よろしくお願いします!

ぐーをフォローする
【業務効率化】VBAITスキル
スポンサーリンク
ぐーをフォローする

コメント

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