VBAを始めたばかりのころ、私は“エラー=ゲームオーバー”くらいの勢いでビビってました。
「え、また止まった…」
「で?この赤いやつ何?」
と、エラーが出るたびに心を削られ、デバッグなんて聞くだけで「それ、魔法か何かですか…?」というレベル。
でも、あれから少しずつ経験を積んで、今では「エラー?はいはい、どこどこ」くらいのメンタルになりました。
本記事では、私の“ビビりVBA時代”の経験をもとに、初心者さんでも「エラーは怖くない!」と思えるエラー処理&デバッグの基本を、わかりやすく解説していきます!
エラーとちょっと仲良くなれたら、マクロとの距離もグッと縮まりますよ。
VBAで「エラー」が起きるってどういうこと?
VBAを書いていて、いきなり謎のメッセージとともに実行が止まる…。
「え、なにこれ、私なにかやらかしました…?」って、最初はなりますよね。
でも安心してください。エラーは“悪者”ではなく、プログラムからの大事なお知らせなんです。
エラーとは?簡単に言うと「処理がうまくいかなくなったよ」というサイン!
VBAでは、コードの内容や実行時の状況によって、処理を途中で止める必要があるときに「エラー」を出して教えてくれます。
つまり、プログラムが「ちょっと!それ無理なんだけど!」ってツッコミを入れてきてる状態です。
エラーにもいろいろある|代表的な2種類を紹介
① 構文エラー(実行前のチェックで見つかるやつ)
これは、コードを書いた瞬間に出てくるエラーです。
たとえば、スペルミスやカッコの閉じ忘れなど。
MsgBox "こんにちは ←←← この “"” が足りない
このようなときは、VBAさんが「これじゃ走れないよ!」と教えてくれます。
このエラーはコードを書くときにすぐ発見できるタイプです。
② 実行時エラー(コードはOKだけど、走らせてみたら問題発生)
こちらは、見た目はOKでも動かしてみたら怒られるやつです。
たとえば:
Range("Z10000").Value = "データ" ' ← そんなセルないよ!と怒られる
や
Dim price As Integer
price = "一万円" ' ← 数字じゃない文字を入れようとして怒られる
この手のエラーは、「書き方」じゃなくて「状況」がおかしいときに出るんです。
エラー画面ってなに?あの黄色いハイライトが怖すぎる問題
実行時エラーが発生すると、VBAは突然止まって、コードの中の一行が黄色くハイライトされます。
初めて見たときの私: 「…この黄色いやつ…なにかの“最終警告”ですか?」
みたいな気分でした。
でも実はこれ、「ここで止まったよ!」という親切なマーカーなんです。
この黄色をヒントに、「何がまずかったんだろう?」と冷静に追っていけば大丈夫です!
エラー=失敗ではない。成長へのステップです!
大切なのは、エラーは恥じゃないし、敵でもないということ。
むしろ、エラーをきっかけに「どこが間違ってたのか」「どうすれば動くか」を学べるのがプログラミングの醍醐味です!
慣れてくると、エラーが出たら「はいはい、またそこね」とちょっと頼もしい自分になっていけますよ。
よくあるエラーとその原因
プログラミング初心者にとって、最初につまずきがちなのが“実行時エラー”です。
でも安心してください。
よく出るエラーはだいたいパターンが決まっています!
この章では「うわっ…私のコード、エラー出た…」と焦らずに済むように、初心者が遭遇しがちな代表的エラーとその原因・対処法をまとめて紹介します!
【例①】型が一致しません(型のミスマッチ)
エラーメッセージ: 「型が一致しません。」(エラー13)
Dim age As Integer
age = "二十歳" ' ← 数字じゃなくて文字が入っている
原因: 変数の型(Integer:整数)に、文字列(”二十歳”)を入れてしまっているため。
解決方法: 入れる値と変数の型を一致させよう!
age = 20 ' ← 整数だからOK!
【例②】オブジェクトが必要です(存在していないセルやシート)
エラーメッセージ: 「オブジェクトが必要です。」(エラー91)
Range("A10000").Value = "テスト" ' ← 実際にはシートにA10000がない
原因: 指定したセルやオブジェクトが存在しない、または参照できていない状態。
解決方法:
- そのセル・シートが実際に存在するか確認する
- シート名やブックがアクティブか注意する
Worksheets("データ").Range("A1").Value = "OK"
【例③】ファイルが見つかりません(ファイルやフォルダのパス違い)
エラーメッセージ: 「ファイルが見つかりません。」(エラー53)
Workbooks.Open "C:\書類\報告書.xlsx" ' ← 実際にそのファイルが存在しない
原因: 指定したパスにファイルがない、またはスペルミスがある
解決方法:
- パスを正しく記述する(フォルダ名や拡張子に注意)
- Dir()関数などで存在確認してから開くと安全
If Dir("C:\書類\報告書.xlsx") <> "" Then
Workbooks.Open "C:\書類\報告書.xlsx"
Else
MsgBox "ファイルが見つかりませんでした。"
End If
【例④】SubやFunctionが定義されていません
エラーメッセージ: 「SubまたはFunctionが定義されていません。」
Call calcTotal() ' ← そのマクロ名が存在していない
原因: 呼び出そうとしている処理が存在していない、またはスペルが違う
解決方法:
- 実際にその関数やSubプロシージャがあるか確認
- 関数名・マクロ名の綴りミスに注意
初心者がやりがちな「エラー迷子」あるある
「どのエラーなのかすらよくわからない…」
「どこを直せばいいのかヒントがない…」
そんなときは、まず黄色くハイライトされた行をじっくり見てみるのがコツ!
そこから順番に「どの変数?どの値?」と絞っていくと、原因が見えてきます。
エラー処理を入れておこう|基本のOn Error構文
エラーって、出るだけでもドキッとしますが、マクロが途中で止まってしまうと作業全体に影響が出てしまいますよね。
「エラーが出たとしても、途中で止まらずに最後まで動いてほしい…」 そんな願いを叶えてくれるのが、エラー処理(On Error構文)です!
ここでは、エラー処理の基本と「よく使う書き方」をやさしく解説していきます。
On Errorとは?マクロが“つまづいても転ばないように”する保険
通常のマクロは、実行中にエラーが発生すると「そこでストップ!」になります。
でも、あらかじめ On Error を書いておけば、「うわっ!」ってなってもそのままやり過ごす or 回避することができるんです。
例えるなら、「石につまずいたら止まる」のではなく、「つまずいても踏ん張って前に進む」イメージですね。
よく使う2つの書き方
パターン①:On Error Resume Next(つまずいてもスルー)
On Error Resume Next
' ↓ ここでエラーが起きても止まらずに次の行へ進む
Range("A1").Value = 1 / 0
MsgBox "マクロ終わりました"
特徴:
- エラーが起きてもスキップして処理を続ける
- 一時的なチェック処理や、「失敗してもOKな処理」に向いています
注意点:
- 何も表示されないので“気づけない”ことも!
パターン②:On Error GoTo ラベル名(エラー時に別の処理へジャンプ)
On Error GoTo ErrorHandler
' 通常処理
Dim x As Integer
x = 10 / 0 ' ← ここでエラー!
Exit Sub
' エラー処理
ErrorHandler:
MsgBox "エラーが発生しました。処理を中断します。"
特徴:
- エラーが起きたら ErrorHandler: にジャンプして処理する
- どこでエラーが出たのか気づける&対処できるのが強み
- エラーログや通知メッセージを出したいときに◎
実務でありがちな使い分けイメージ
処理内容 | おすすめの書き方 |
---|---|
ファイルが存在するか確認だけしたい | On Error Resume Next |
大事な処理の途中で問題があれば止めたい | On Error GoTo |
処理失敗時にメッセージを出したい | GoTo でジャンプして MsgBox を表示 |
初心者向けアドバイス
- On Error Resume Next は使いどころを絞るのがコツ(多用すると原因が見えなくなる)
- うまくいった/失敗した を自分でログやメッセージで教えてもらえるようにすると安心
- エラー処理の後は Exit Sub を入れて、正常処理が終わったらエラー処理に飛ばないように!
デバッグってどうやるの?初心者でもできるチェック術
エラーが出たとき、「どこをどう直せばいいの!?」って思いますよね。
そこで登場するのが “デバッグ”=コードの中身を確認・追跡する作業 です。
難しそうに聞こえるかもしれませんが、VBAには 初心者でもすぐに使える便利な機能 がそろっています!
この章では、「まずはここから!」という基本のデバッグ手順を紹介します。
① F8キーで「1行ずつ実行」してみよう!
まず最初に覚えておきたいのが、F8キー。
これは「マクロを1行ずつ実行する」操作で、処理の流れを目で追うことができます。
手順:
- 実行したいマクロのカーソルを Sub ~ End Sub の中に置く
- F8キー を押す
- 黄色いハイライトが出て、1行ずつ動いていく
ポイント:
- どの行で止まるかを見ることで、エラーが出る直前を特定できます
- 変数の値がどう変わっていくかも確認できる!
② ローカルウィンドウで「変数の中身」をのぞいてみよう!
F8でコードを1行ずつ実行しているときに、変数の中に何が入っているか確認したくなりますよね。
そんなときは「ローカルウィンドウ」が便利です。
表示方法:
- VBA画面の上部メニューから 表示 → ローカルウィンドウ を選択
すると、今使っている変数とその中身が一覧で確認できます。
「あれ、この変数、空っぽのままじゃん!」といった気づきが得られます!
③ ウォッチ式で「特定の値」をチェック!
少し慣れてきたら、「ウォッチ式」という機能も使ってみましょう。
これは、自分で指定した変数や式の値を随時モニタリングできる機能です。
手順:
- 変数を選択し、右クリック → [ウォッチ式の追加]
- [ウォッチ] ウィンドウで常にその変数の値を確認できる!
たとえば total の中身をずっと見ていたいとき、計算式や条件の評価をリアルタイムで見守れるので便利です
④ ブレークポイントで「ここで止める!」を設定
「この行の前後で問題が起きてる気がする…」 そんなときに役立つのが、ブレークポイント(赤い点)です!
設定方法:
- 確認したい行の左端(灰色の列)をクリック → 赤丸が出たらOK!
実行すると、その行で一時停止してくれるので、意図的にコードを途中で止めて確認できます。
⑤ 即時ウィンドウで「その場で変数の中身」をチェック
即時ウィンドウでは、実行中に今の値を調べたり、命令を試したりすることができます。
表示方法:
- [表示] → [即時ウィンドウ] をクリック
使い方例:
? userName
と打って Enter を押すと、その時点での userName の中身が表示されます!
初心者向けワンポイント
- 最初は F8キーとローカルウィンドウだけでも十分!
- デバッグを面倒に感じるかもですが、「エラーを自力で直せた」ときの達成感は格別です。
- わからなくても、「黄色い行」「その直前」「変数の中身」だけ見ればOK!少しずつ慣れていきましょう。
初心者がやりがちなミス&ちょっとした工夫
「なんでうまく動かないの〜!」と、モニターの前で頭を抱えたこと、ありませんか?
私はVBAを始めたばかりの頃、「コード書いたのに動かない」症候群に何度も悩まされました。
でも実は、初心者がつまずきやすいポイントってだいたいパターンが決まっているんです。
この章では、よくあるミスと、それを防ぐちょっとした工夫をご紹介します!
よくあるミス①:変数の宣言ミス or 宣言し忘れ
Dim userName As String
usreName = "Taro" ' ← ん?誰?(スペルミス)
原因:
- スペルミスや、変数を宣言していないのに使っている
- Option Explicit を書いていないため、ミスに気づきにくい
対策:
- 「Option Explicit」をモジュールの先頭に書く! → 宣言してない変数を使ったときに、エラーで教えてくれます!
Option Explicit
Dim userName As String
userName = "Taro"
よくあるミス②:シート名・セル番地のミス
Worksheets("売上").Range("A1").Value = 100
ありがちポイント:
- シート名をあとで変えて動かなくなる
- “Sheet1” と “sheet1” を間違えて大文字小文字ミス
対策:
- 事前にシート名を確認する(スペル含めて)
- 変数でシートオブジェクトをセットすると安心!
Dim ws As Worksheet
Set ws = Worksheets("売上")
ws.Range("A1").Value = 100
よくあるミス③:処理の順番が逆になっている
ActiveWorkbook.SaveAs "ファイルパス"
' ↓その後に値を入れている
Range("A1").Value = "データ"
原因:
- 保存してから処理をしてしまい、保存ファイルが空っぽ状態になることも
対策:
- 「どこで保存するか」を意識しよう!
- データの入力・処理が終わってから保存するのが基本です!
ちょっとした工夫①:MsgBoxで処理の進み具合を確認する
MsgBox "ここまで来たよ!"
処理の節目節目にこの1行を入れておくと、「どこまで正常に動いたか」が目で確認できて便利です。
ちょっとした工夫②:「コメントアウト」を活用しよう!
' Range("A1").Value = "ここは一時的に使わない"
トラブルが起きている場所を切り分けるときなど、一時的に処理を止めたい行はコメントアウトが便利!
ショートカット:Ctrl + Shift + A でトグルできます(※VBEのツールバー設定が必要です)
最後に:ミスも一歩前進のチャンス!
間違えたとき、焦って全部消したくなることもありますよね。
でも大丈夫。ミスは成長のタネです。
「次からはこうしよう!」と思えたら、その分だけ上達しています。
この記事を読んでくれているあなたも、すでにデバッグ初心者の一歩先へ進んでいますよ!
エラーに強くなるマクロの書き方とは?
ここまでで、「エラーってこういう仕組みなんだ」「こうやって対処すればいいんだ」と学んできましたね。
じゃあ最後は、そもそも「エラーを減らすためのコードの書き方」を身につけておきましょう!
ちょっとした意識の違いで、マクロがグッと安定&安心になります。
① 1ステップ1目的|処理はこまかく分けよう
初心者のころほど、あれこれ詰め込みたくなってコードが長〜くなりがちです。
でも、1つの処理を小さく分けて書くと、エラーの原因がすごく見つけやすくなります!
' NG例(処理が混在していてわかりにくい)
Workbooks.Open "ファイルパス"
Range("A1").Value = Range("B1").Value + Range("C1").Value
ActiveWorkbook.SaveAs "保存パス"
↓
' OK例(処理を分けて読みやすく)
Dim book As Workbook
Set book = Workbooks.Open("ファイルパス")
Dim total As Double
total = Range("B1").Value + Range("C1").Value
Range("A1").Value = total
book.SaveAs "保存パス"
② 想定外の入力が来たら止める or 伝える
If Range("A1").Value = "" Then
MsgBox "A1セルにデータが入っていません"
Exit Sub
End If
こういった「チェックのひと手間」があるだけで、うっかり操作で動かしてしまっても事故を防げます!
“エラーメッセージ”ではなく“やさしいガイド役のメッセージ”として入れておくのも◎です。
③ エラー処理は「使う場所」を見極めて
すべての処理に On Error Resume Next をつけたくなる気持ち、すごくわかります。
でも、本当に無視してよいエラーなのか?を判断して使うのが大切です!
処理内容 | エラー処理つける? | 理由 |
---|---|---|
ファイルがあったら開く | つける | 存在チェック後に処理するため |
絶対にエラーが許されない計算処理 | つけない or 明示的にチェック | 不正確なまま進んではNG! |
外部シートへの参照(存在しないかも) | or 条件付き | 条件判断で回避できるとベター |
④ コメントで“自分の未来の自分”を助けよう!
' 売上が8万円超えたら報告フラグON
If sales > 80000 Then
alert = True
End If
こんな感じで、処理の意図を書いておくと後で助かります!
「1週間後の自分は他人」と思って書くのがポイントです。
⑤ 決まった構文をテンプレ化しておくと安心
初心者のうちは、「あれ、これどう書くんだっけ?」が頻発しますよね。
そこで、自分なりの「よく使う処理テンプレ」を用意しておくとかなり楽になります。
たとえば:
- ファイル存在確認→開く
- 空白チェック→処理止める
- セルに数値が入っているか確認→計算続行
メモ帳や別シートで“エラーに強いひな形ストック”を作っていくのもおすすめです。
最後に:マクロを“自分と仲良くなる道具”に
「エラー=怖い」じゃなくて、「エラー=わかってくれようとしてるサイン」と思えるようになると、 プログラミングがぐっと身近で楽しいものになっていきます。
完璧じゃなくてOK。少しずつ、「動いた!」「わかった!」を積み重ねていきましょう。

私自身もVBAを始めたばかりのころは、エラーが出るたびにビクビクして「なにが悪かったの…?」と画面の前で固まっていました。
でも少しずつ経験を積むうちに、「エラーは敵じゃなくて、“ここ直した方がいいよ”って教えてくれる存在」だと思えるようになりました。この記事が、今まさにエラーに悩んでいるあなたの“味方”になれたら嬉しいです!
コメント