IT坊やだからさ。

ウェブディレクター/プログララマーの現役フリーランスが送るガンダム話

プログラミング

【解決策あり】VBAのエラーまとめ!エラーランキング5!

投稿日:

VBA開発でよくあるエラーまとめ!エラー出現ランキング!

仕事でVBA案件をもらうことがある。

わたしは元々VBAが最も得意だった。

VBAとはマクロの事だ。

プログラミング言語の中ではシンプルな言語でわかりやすい。

今回、数多くのVBA案件をこなしていく中でよく発生するVBAエラーを一覧にまとめてみた。

更に発生する頻度をランキングにしたら少しはVBAエラーも愛せるかもしれないと思いランキング形式にする。

もちろん解決策付きだ。

VBAの辞書として使って頂きたい。

【VBAエラーランキング5位】エラー番号13:型が一致しません

まずはランキング5位からスタートしよう。

ランキング5位のエラーに選んだのは「型が一致しません」というエラーだ。

このエラーはケアレスミスで発生する。

エラー内容は単純明快で「数値型」に「文字型」の値を代入するようなものだ。

VBAの言葉を借りれば「カレーが好きなのに何トンカツ持ってきてんだ、バロー」というところか。

「型が一致しない」エラーについては、デバッグすれば一発で修正箇所が判断できる。

解決策を見つけるのは比較的簡単だ。

だが思った以上に値の型は様々なものが存在する。

Boolean型などは初心者にはちょっと理解しずらいかもしれない。

文字型、数値型以外にもいくつか変数を持ち合わせているので、その辺りも勉強すると強くなれる。

【VBAエラーランキング4位】エラー番号1004:アプリケーション定義またはオブジェクト定義のエラーです

VBAエラーランキング4位は「アプリケーション定義またはオブジェクト定義のエラーです」にした。

このエラーは「そんなもの存在しねーんだよ、バカやろ」というエラーだ。

VBAさん、落ち着いて。

では何が存在しないと言っているのだろうか。

次のようなデータテーブル要素を用意した。(エクセルのシートだと思ってもらいたい)

C
2 火曜
3 水曜
4 木曜
5 金曜
6 土曜
7 日曜

このテーブル要素ではC列について取り扱っている。

「アプリケーション定義またはオブジェクト定義のエラーです」を発生させるにはC列以外、もしくは2〜7行以外の場所を指定して値を取得すると発生する。

定義している内容が不明ですという事だ。

この解決策も同じで定義の内容を修正するか、定義しているものを存在させるかの2択になる。

主に指定先が間違えている場合が多いので確認されたし。

【VBAエラーランキング3位】エラー番号5:プロシージャの呼び出し、または引数が不正です

このエラーはちょっと毛色が違う。

完全に暗記系のエラー内容だと言える。

VBAで用意されている関数で使用できる引数が間違えている場合に発生するエラーだ。

例えばVBAには「Format」という関数が用意されている。

Format( expression[,format [,firstdayofweek [,firstweekofyear]]])

引数 値の内容
expression 日付や数値など文字列型に変換したい値を指定
format 書式を指定
firstdayofweek 最初の曜日を指定する定数
firstweekofyear 年内で、最初の週を指定する定数

主に書式を変換させる時に使う関数である。

定義では2つ(firstdayofweek, firstweekofyear)引数を持たせることができる仕様になっている。

これを3つ以上持たせたり、また型に合わない引数を持たせたりすると「プロシージャの呼び出し、または引数が不正です」と怒られるのだ。

「プロシージャの呼び出し、または引数が不正です。」とは関数をしっかり勉強し直してくださいというVBAからのメッセージである。

【VBAエラーランキング2位】エラー番号438:オブジェクトは、このプロパティまたはメソッドをサポートしていません

定義の仕方が間違えている場合に発生するエラー「オブジェクトは、このプロパティまたはメソッドをサポートしていません」について。

このエラーは「プロシージャの呼び出し、または引数が不正です」と似ているかもしれない。

エラーの内容を人間らしく表現すると「そんなプロパティ知らんのじゃ、ボケ」という意味だ。

VBAさん、相変わらず口が悪い。

だがそういう事だ。

つまり定義されていないプロパティを指定していることになる。

VBA関数にはプロパティと呼ばれる設定があり、その指定を間違えると「オブジェクトは、このプロパティまたはメソッドをサポートしていません」とエラーが発生する。

具体的にいうと「.」で区切ったもので「Range().Value」などがこれに相当する。

関数「Range()」はセルの指定で「.Value」はセルの中身という感じ。

「オブジェクトは、このプロパティまたはメソッドをサポートしていません」が表示されるときはプロパティの定義を見直してみると良い。

「オブジェクトは、このプロパティまたはメソッドをサポートしていません」は関数のプロパティを覚えていけば大丈夫。

【VBAエラーランキング1位】エラー番号9:インデックスが有効範囲にありません

VBAエラーランキング1位に輝いたのは「インデックスが有効範囲にありません」だ。

このエラーは本当に多い。

特に0から新しく手組みでプログラミングする場合に多く発生する。

このエラーを人間味のある言葉で表すと「そんなもの存在しねーよ、ボケ」というエラーメッセージになる。

VBAさん、口が悪いようで。

だがそういうことだ。

「定義しているものが存在しませんよ」ということである。

このエラーはランキング4位に入れた「アプリケーション定義またはオブジェクト定義のエラーです」とすごく似ている。

では「アプリケーション定義またはオブジェクト定義のエラーです」と何が違うのだろうか。

それはエラーとしている対象が違う点だ。

「インデックスが有効範囲にありません」の場合は、セルやシートを引数に代入するパターンでエラーを起こしている。

例えばセルの要素(C4:C7)という範囲を指定する。

C
2 火曜
3 水曜
4 木曜
5 金曜
6 土曜
7 日曜

この場合、C2(火曜)とC3(水曜)は含まれないはずが、関数の値に「水曜」などを代入しようとすると発生する。

要素に存在しない値を代入しようとするからだ。

このエラーの解決方法は、ざっくり言えば定義の内容を修正するか、定義しているものを存在させるかの2択になる。

セルの値だけでなくタブやシート名など様々な要素で発生するエラーの代表格だろう。

プログラミング言語は難しそうと思うかもしれないが、自転車と同じである程度の慣れが必要である。

まずは独学するなりプログラミング学習を受講するなりして技に磨きをかけていきたい。

※10,000人以上輩出のエンジニアスクール【TECH::CAMP】
TECH::CAMP(エンジニアスクール)
※ビットコインでも決済できるエンジニアスクール
オンラインブートキャンプ 無料体験
※業界初のブロックチェーン・AI・IoTコース付きエンジニアスクール
3ヶ月間のプログラミングスクール【Tech Boost】

VBAと仲良くなるならランキングに登場したエラーの解決策は覚えておきたい。

「なに間違えてんだ、バロー」

VBAさんは御機嫌斜めだ。

「なに、もっと活躍したプログラミング言語になりたかっただと」

そうか、VBAにも悩みがあるんだな。

皆さん、VBAをもっと使ってあげてやってくれ。

今日も良い1日を。

      

-プログラミング

執筆者:

関連記事

【Javascript】デジタル時計とアナログ時計の作り方!

【Javascript】デジタル時計とアナログ時計の作り方!

今回はJavascriptで時計を作ってみた。 Javascriptは動的なオープンソースプログラミング言語で汎用性が高い。 ウェブ屋としてはHTMLと親和性も高いことから必然的に習得した技術の賜物で …

ITエンジニアになるならHTMLから始める事をオススメ!

ITエンジニアになるならHTMLから始める事をオススメ!

わたしは現在ITエンジニアとしてフリーランスをやらせてもらっている。 最初からフリーランスエンジニアを目指して活動をしていたわけでないが、自然と始めたことがある。 それがウェブ系のプログラミング言語H …

【CSS/Javascript】ナビゲーションバーをトップに固定!

【CSS/Javascript】ナビゲーションバーをトップに固定!

ナビゲーションバーをウェブサイトのトップに固定する手順。 ひと昔であればjQueryなど使って対応していたが、今はCSSだけでも十分に対応できる時代になった。 今回はJavascriptの知識もかねて …

【jQuery】Javascriptで横スクロールのスライドショー!

【jQuery】Javascriptで横スクロールのスライドショー!

今回はJavascriptを使ったプログラミング作品の一例。 よくある横スクロール型のスライドショーをウェブサイトに組み込んでみる。 横スクロールはJavascriptの定番機能だが基礎的な作り方が学 …

【簡単】Javascriptを使ってサクッとQRコードを発行する!

【簡単】Javascriptを使ってサクッとQRコードを作成!

今回は思いっきりプログラミングのことについて書こう。 と言っても内容は至って簡単なコードだけだ。 実現したのは「Javascript」を使って「QRコード」を発行するというシステムだ。 先日、あるクラ …

プロフィール

逆襲のジェリド

逆襲のジェリドは史実を覆すべく、復活を遂げた。時代はプログラミングを求める!俺を戦いに駆り立てたのは貴様だ!そんなこと言えるのかよ!

現役ITエンジニアフリーランス。得意分野はphp、Java、Javascript、VB.net、VBA。仕事についてはDMで。このブログではウェブかプログラミング、ガンダムについて徒然なるままに。

詳しくはこちら→ 詳細プロフィール