こんにちは!ぐーです。
いつもブログをご覧いただき、ありがとうございます!
- 「VBAを学び始めたけど、エラーばかりで動かない…」
- 「『なんで動かないの!』って、もう心が折れそう…」
そんな風に感じていませんか?
ITやプログラミングって、常にエラーとの戦いですよね。
特にVBAはExcelと密接なので、「ちょっとした自動化」のつもりが、エラー画面が出てきて「やっぱり私には無理かも…」とネガティブになってしまう気持ち、本当によくわかります。私も最初はそうでした。
この記事では、VBA初心者がハマる「なぜか動かない」エラーのトップ5と、今すぐコピペで試せる即効解決策をご紹介します。
「エラー=怖いもの」から「エラー=解決できる問題」に変えていきましょう!
😱もう「動かない!」で泣かない。VBA初心者が絶対ハマるエラーTOP5と即効解決策
【第5位】実行時エラー ’91’: オブジェクト変数が設定されていません

これは、「使う『モノ』(オブジェクト)の準備ができていないよ!」というエラーです。
- よくある原因: ワークシートなどを変数に入れようとした時、Setを付け忘れている。
- 解決策: オブジェクト(シートやセル範囲など)を変数に入れる時は、必ずSetを付けましょう。
' ダメな例
Dim ws As Worksheet
ws = Worksheets("Sheet1") ' これだとエラー '91
' 良い例 (コピペOK)
Dim ws As Worksheet
Set ws = Worksheets("Sheet1") ' Set を付ける
ws.Range("A1").Value = "こんにちは"
【第4位】実行時エラー ’13’: 型が一致しません

これは、「その『箱』(変数)には、その『中身』(データ)は入らないよ!」というエラーです。
- よくある原因: 数値を入れるための変数(例: Integer)に、文字列(例: “あいうえお”)を入れようとした。
- 解決策: 変数に入れるデータの「型」を確認しましょう。デバッグモード(F8キーで1行ずつ実行)で、変数にマウスカーソルを当てると中身が見えますよ。
' ダメな例
Dim suuji As Integer
suuji = "東京" ' Integer(数値型)に文字列は入らない
' 良い例 (コピペOK)
Dim moji As String
moji = "東京" ' String(文字列型)に入れる
Dim suuji_moji As String
suuji_moji = "100" ' "100" は文字列
Dim suuji As Integer
suuji = CInt(suuji_moji) ' CInt() で数値に変換
【第3位】実行時エラー ‘9’: インデックスが有効範囲にありません

これは、「指定された『番号』や『名前』のものが、見つからないよ!」というエラーです。
- よくある原因: Worksheets(“集計”)と書いたつもりが、実際のエクセルシート名がWorksheets(“集計 “)(最後にスペース)だったり、Sheet1だったりする。
- 解決策: シート名やファイル名が、1文字も違わずに合っているか、穴が開くほど確認しましょう。特に「全角・半角スペース」は見落としがちです!
' ダメな例(”集計”シートをそもそも作ってない状態で)
Worksheets("集計").Select
【第2位】実行時エラー ‘1004’: (オブジェクトの)メソッドが失敗しました

これはVBA初心者にとって最恐のエラーかもしれません。「やりたい操作(メソッド)が、その状況じゃできないよ!」という意味です。
- よくある原因: Range(“A1”).Select(A1セルを選択)しようとした時、そのセルがあるシートがアクティブ(一番手前に表示)になっていない。
- 解決策: 操作したい対象(セルなど)があるシートを、先にSelect(選択)してアクティブにしてあげましょう。
' ダメな例
' (Sheet2 がアクティブな時に実行するとエラー)
Worksheets("Sheet1").Range("A1").Select
' 良い例 (コピペOK)
Worksheets("Sheet1").Select ' まずシートを選択
Range("A1").Select ' 次にセルを選択
' もっと良い例 (Selectしない)
' 「Select」は遅くなる原因なので、慣れたらこれを目指しましょう
Worksheets("Sheet1").Range("A1").Value = "直接書き込む"
【第1位】コンパイルエラー: 変数が定義されていません

堂々の第1位はこれです。「そんな『名前』(変数)は知らないよ!」という、プログラム実行前の文法チェックエラーです。
- よくある原因: ほとんどが単純なスペルミスです。userNameとuseNameみたいに。
- 解決策:
- まずスペルミスを疑う。
- VBAエディタの一番上に、以下の「おまじない」を必ず書くクセをつけましょう。
' ダメな例(そもそも変数を定義していない)
MsgBox moji
' VBAファイルの先頭に必ず書く (コピペOK)
Option Explicit
これを書いておくと、定義していない(Dimで宣言していない)変数を使おうとした瞬間に、VBAが「この変数、知らないよ!」と教えてくれるようになります。
スペルミスが激減しますので、ぜひ設定しておきましょう!
💼 エラーは怖くない。あなたの「最強の味方」です
書いたコードがが動かない時、「自分はダメだ…」と落ち込む必要は全くありません。
エラーメッセージは、VBAが「ここが間違ってるよ!ここを直せば動くよ!」と教えてくれている「ヒント」です。
今回は割愛しますが、仕様(=やりたいこと)が複雑になればなるほど、エラーメッセージの内容と本当の原因が乖離して苦労する状況が生まれます。それでもエラーメッセージがヒントにならないことはありません。
さらに今日紹介した5つのエラーは、私も含めベテランでもたまにやります(笑)。大切なのは、エラーが出た時に「はいはい、これね」と冷静に対処できることだと私は思います。
VBAが使えるようになると、事務仕事が劇的にラクになるので、一緒にがんばっていきましょう!
VBAを独学で学び、業務自動化に5年以上携わってきた私が、「本当に実務で役立った!」と感じた2冊を厳選して紹介します。 もう本選びで失敗したくない方は、ぜひ参考にしてみてください。

コメント