なぜ動かない?VBA初心者がハマりがちなエラーとその解決策トップ5

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

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

  • 「VBAを学び始めたけど、エラーばかりで動かない…」
  • 「『なんで動かないの!』って、もう心が折れそう…」

そんな風に感じていませんか?

ITやプログラミングって、常にエラーとの戦いですよね。

特にVBAはExcelと密接なので、「ちょっとした自動化」のつもりが、エラー画面が出てきて「やっぱり私には無理かも…」とネガティブになってしまう気持ち、本当によくわかります。私も最初はそうでした。

この記事では、VBA初心者がハマる「なぜか動かない」エラーのトップ5と、今すぐコピペで試せる即効解決策をご紹介します。

「エラー=怖いもの」から「エラー=解決できる問題」に変えていきましょう!

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


😱もう「動かない!」で泣かない。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みたいに。
  • 解決策:
  1. まずスペルミスを疑う。
  2. VBAエディタの一番上に、以下の「おまじない」を必ず書くクセをつけましょう。
' ダメな例(そもそも変数を定義していない)
MsgBox moji

' VBAファイルの先頭に必ず書く (コピペOK)
Option Explicit

これを書いておくと、定義していない(Dimで宣言していない)変数を使おうとした瞬間に、VBAが「この変数、知らないよ!」と教えてくれるようになります。

スペルミスが激減しますので、ぜひ設定しておきましょう!


💼 エラーは怖くない。あなたの「最強の味方」です

書いたコードがが動かない時、「自分はダメだ…」と落ち込む必要は全くありません。

エラーメッセージは、VBAが「ここが間違ってるよ!ここを直せば動くよ!」と教えてくれている「ヒント」です。

今回は割愛しますが、仕様(=やりたいこと)が複雑になればなるほど、エラーメッセージの内容と本当の原因が乖離して苦労する状況が生まれます。それでもエラーメッセージがヒントにならないことはありません。

さらに今日紹介した5つのエラーは、私も含めベテランでもたまにやります(笑)。大切なのは、エラーが出た時に「はいはい、これね」と冷静に対処できることだと私は思います。

VBAが使えるようになると、事務仕事が劇的にラクになるので、一緒にがんばっていきましょう!

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


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

この記事を書いた人
ぐー

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

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

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

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

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

コメント

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