Excel・VBA

Excel VBA実行時エラー438が出たときの確認項目|メソッド・プロパティの違い

Excel VBAでマクロを実行した際に突如として現れる「実行時エラー438:オブジェクトは、このプロパティまたはメソッドをサポートしていません」という警告。このエラーは、VBA初心者から中級者まで非常に多く遭遇するトラブルですが、原因と対処法を正しく理解すれば、誰でもスムーズに解決可能です。

公開日:2026年7月9日 更新日:2026年7月9日
Excel VBA実行時エラー438が出たときの確認項目|メソッド・プロパティの違い
目次

この記事で分かること

  • 実行時エラー438が発生する根本的な原因と、プロパティとメソッドの決定的な違い
  • スペルミスやオブジェクトの指定ミスなど、実務でよくある原因とそれぞれの修正方法
  • VBE(VBAエディタ)のデバッグ機能やローカルウィンドウを活用してエラー箇所を特定する具体的な手順
  • 自力での解決が難しい場合に、プロへマクロの修復・改修を相談するメリット

実行時エラー438「オブジェクトは、このプロパティまたはメソッドをサポートしていません」とは

Excel VBA開発において、「実行時エラー438」は最も発生頻度の高いエラーの一つです。このエラーメッセージは、一言で言えば「あなたが指定した命令(プロパティやメソッド)は、その操作対象(オブジェクト)には存在しません(サポートしていません)」ということを意味しています。

これを日常生活に例えると、以下のような状態です。

  • 「車(オブジェクト)」に対して「空を飛ぶ(メソッド)」という命令を出す
  • 「家(オブジェクト)」に対して「最高速度はキロメートルですか?(プロパティ)」と尋ねる

車には空を飛ぶ機能はありませんし、家に最高速度という属性は存在しません。そのため、このような命令を出すと車や家は動作できずに混乱してしまいます。

Excel VBAでも全く同じことが起きています。例えば、「ワークシート(Worksheetオブジェクト)」に対して「ブックを閉じる(Closeメソッド)」という命令(※CloseはWorkbookオブジェクトのメソッドです)を実行しようとしたり、「セル(Rangeオブジェクト)」に対して「ワークシートの名前(Nameプロパティ)」を変更しようとしたりすると、VBAは「そんな処理はサポートしていません」と実行を停止し、エラー438を返します。

このエラーを根本から解決するためには、「自分が今どのオブジェクトを操作しているのか」と「そのオブジェクトがどのようなプロパティやメソッドをサポートしているのか」を正しく一致させることが不可欠です。

エラー438が発生する主な原因と対策

実行時エラー438が発生する原因は、主に以下の4つのパターンに分類されます。それぞれの原因と、実務における具体的な対策を解説します。

原因1:単純なスペルミス(タイポ)

最も多く、かつ見つけにくいのが、プロパティ名やメソッド名の単純な入力ミスです。

' エラーになる例(Valueの最後のeが抜けている)
Range("A1").Valu = "テスト"

' 正しいコード
Range("A1").Value = "テスト"

VBAはスペルが1文字でも異なると、それを「存在しない未知のプロパティやメソッド」と解釈します。そのため、コンパイル時には見過ごされても、プログラムを実行した瞬間にエラー438が発生します。大文字と小文字の自動変換機能(正しいスペルで入力されると、VBAが自動的に先頭を大文字にする機能)が働いているかを確認することで、スペルミスに気づきやすくなります。

原因2:オブジェクトの取り違え(不適切なメンバの呼び出し)

自分が操作しているつもりになっているオブジェクトと、実際にVBAが認識しているオブジェクトが異なっているケースです。

' エラーになる例(シートオブジェクトを閉じようとしている)
Worksheets("Sheet1").Close

' 正しいコード(ブックオブジェクトを閉じる)
ActiveWorkbook.Close

上記の例では、シートを閉じたいという意図でコードを書いたとしても、CloseメソッドはWorkbookオブジェクトの命令であり、Worksheetオブジェクトはサポートしていません。このように、オブジェクトの親子関係や階層構造を誤解しているとエラーが発生します。

原因3:ExcelのバージョンやOSの違いによる非対応

作成したマクロを異なる環境(古いバージョンのExcelやMac版のExcelなど)で実行した際に発生するケースです。

例えば、新しいExcelで追加されたグラフの新しい操作プロパティや、テーブル機能のメソッドを含むマクロを、Excel 2013などの古い環境で実行すると、その環境のオブジェクトライブラリには該当するプロパティやメソッドが存在しないため、エラー438が発生します。また、Windows専用のActiveXコントロール(UserForm上で使用する特定の部品など)をMac版Excelで動作させようとした場合にも同様のエラーが頻発します。

原因4:Object型(レイトバインディング)の使用に伴うコンパイル時のチェック漏れ

変数宣言時に Dim obj As Object のように具体的な型を指定しない「Object型(汎用オブジェクト型 / レイトバインディング)」を使用している場合、VBAはプログラムを実行するまで、その変数の中身が何であるかを確定しません。そのため、コード作成段階での文法チェック(コンパイル)をすり抜けてしまい、実行した瞬間に「そのオブジェクトには指定されたメソッドがなかった」と判明してエラー438になります。

以下に、よくあるエラー原因と具体的なコード例、および正しい修正方法をテーブルにまとめました。

エラー発生の状況 エラーになるコード例 正しいコード例 解決のポイント
セルへの書き込み時のスペルミス Range("A1").Valu = 100 Range("A1").Value = 100 Valueプロパティの綴りを確認する。自動メンバー表示(インテリセンス)を活用。
ワークシートの削除・操作ミス Worksheets("Sheet1").Save ActiveWorkbook.Save Save(保存)はブックのメソッド。シートを個別に保存することはできない。
セル範囲のファイル出力ミス Range("A1:C10").ExportAsFixedFormat ... ActiveSheet.ExportAsFixedFormat ... ExportAsFixedFormat(PDF出力等)はシートやブックのメソッドであり、特定のセル範囲(Range)には適用不可。

修正で済むか、作り直すべきか迷ったら

現状を確認し、修正・保守・刷新のどれが現実的かを整理します。

プロパティとメソッドの違いと見分け方

エラー438を今後自分でスムーズに解決・予防できるようになるためには、「プロパティ」と「メソッド」の違いを正しく理解し、見分ける力を養うことが最も重要です。

プロパティ(Property)とは:オブジェクトの「状態」や「属性」

プロパティとは、オブジェクトが持っている「性質」や「データ」を表すものです。国語で言えば「名詞」や「形容詞」に該当します。プロパティに対しては、値を「取得する(読み込む)」か、または「設定する(書き換える・代入する)」という操作を行います。

  • Range(“A1”).Value(セルの値・中身)
  • Range(“A1”).Font.Color(セルの文字色)
  • Worksheets(“Sheet1”).Name(シートの名前)

これらはすべて、対象オブジェクトがどのような状態にあるかを示したり、設定したりするためのものです。代入を行う際は、基本的にイコール(=)を使って値を結びつけます。

メソッド(Method)とは:オブジェクトに対する「動作」や「命令」

メソッドとは、オブジェクトに特定の「処理を実行させる」ための命令です。国語で言えば「動詞」に該当します。メソッドを実行すると、オブジェクトに対して何らかのアクション(選択、削除、追加、コピーなど)が起こります。

  • Range(“A1”).Select(セルを選択する)
  • Range(“A1:B10”).Copy(指定範囲をコピーする)
  • Worksheets.Add(新しいシートを挿入する)

メソッドは、処理を実行する際に追加の指示(引数)を伴うことがあります。例えば、Worksheets.Add After:=Worksheets(1) のように記述して、挿入する場所を細かく指定できます。

プロパティとメソッドの簡単な見分け方

VBAエディタ(VBE)内でコードを書いている際、ドット(.)を入力すると候補リスト(自動メンバー表示)が表示されます。このリストに表示される「アイコン」で見分けるのが最も簡単です。

  • プロパティのアイコン: 手が書類を指しているようなマーク(または手のアイコン)。そのオブジェクトが持つ「属性」を表します。
  • メソッドのアイコン: 緑色の立方体が飛んでいるような、動きのあるマーク。そのオブジェクトが実行できる「動作」を表します。

また、VBEで「F2」キーを押すと起動する「オブジェクトブラウザ」を使用すると、Excelのすべてのオブジェクト(Range、Worksheet、Workbookなど)が持つプロパティとメソッドを詳細に検索・確認することができます。エラーが発生した際は、オブジェクトブラウザで該当のオブジェクトを検索し、使おうとしている命令が本当にリストに存在するか確認する癖をつけましょう。

実行時エラー438のデバッグ・修正手順

マクロを実行したときにエラー438のポップアップが表示されたら、以下の5つのステップに沿ってデバッグ(プログラムの修正作業)を行いましょう。

ステップ1:デバッグボタンを押してエラー箇所を特定する

エラー画面に表示されている「デバッグ」ボタンをクリックします。すると、VBEが起動し、エラーを引き起こしている原因のコード行が黄色くハイライトされます。まずは、この「黄色い1行」の中に問題があることを認識します。

ステップ2:ドット(.)の前後を確認する

黄色い行の中から、ドット(.)で結ばれている部分を探します。例えば、myObject.Clean という記述があった場合、以下の2点を確認します。

  1. ドットの左側にある「オブジェクト(myObject)」が何であるか
  2. ドットの右側にある「プロパティまたはメソッド(Clean)」が、そのオブジェクトに対応しているか

※なお、CleanはWorksheetFunctionオブジェクトのメソッド(Application.WorksheetFunction.Clean)であり、通常のセルやシートオブジェクトに直接指定することはできません。このような取り違えがないかを確認します。

ステップ3:ローカルウィンドウで変数の「型」を確認する

オブジェクトを格納している「変数」を使って操作している場合、実行時にその変数に意図しないオブジェクトが入ってしまっていることがあります。
VBEのメニューから「表示」→「ローカルウィンドウ」を開きます。デバッグで一時停止している状態で、ローカルウィンドウ内の該当変数の「型(Type)」欄を確認してください。もし、Worksheet型を期待している変数の中身がRange型になっていた場合、そのオブジェクトはシート用のメソッドをサポートしていないためエラー438が発生します。

ステップ4:TypeName関数をイミディエイトウィンドウで実行する

オブジェクトの正体をより素早く突き止めたい場合は、VBEの「イミディエイトウィンドウ」を活用します(「表示」→「イミディエイトウィンドウ」で起動)。
イミディエイトウィンドウに以下のように入力し、Enterキーを押します。

? TypeName(エラーが発生しているオブジェクト変数名)

例えば、? TypeName(ActiveSheet) と入力して Chart と返ってきた場合、現在アクティブなシートは通常の「ワークシート」ではなく「グラフシート」です。グラフシートはセルの操作(Rangeなど)をサポートしていないため、エラー438が発生していたという根本的な原因を突き止めることができます。

ステップ5:安易な「On Error Resume Next」の使用を止める

エラー438を回避するために、コードの先頭に On Error Resume Next を書き足してエラーを無視しようとする手法が紹介されることがありますが、これは非常に危険な避難策です。
エラーが無視されるだけで、実行されなかった処理(データの転記や保存など)はスキップされたまま進むため、後に「データが一部消えている」「計算結果が合わない」といった、より深刻で発見しにくい致命的な不具合を招きます。必ずエラーの原因を特定し、コード自体を修正してください。

修正で済むか、作り直すべきか迷ったら

現状を確認し、修正・保守・刷新のどれが現実的かを整理します。

マクロのエラーや不具合の修正をプロに相談するメリット

Excel VBAの実行時エラー438は、自分で作成したシンプルなマクロであれば、上記の手順に沿って比較的容易に解決できます。しかし、以下のような状況においては、自力での修正に多大な時間とリスクが伴います。

  • 前任者が作ったマクロ: コードが複雑に絡み合っており、1箇所直すと別の場所で新たなエラーが噴出する
  • ブラックボックス化したシステム: 仕様書や設計書がなく、どのオブジェクトがどこに関連しているか分からない
  • 業務直結のツール: 毎日稼働しているため、一刻も早く安全に復旧させる必要がある

このような場合、自力で何時間も悩むよりも、VBA開発やマクロ修復の専門家へ相談・外注することを強くお勧めします。

プロに相談・外注するメリット

  • 圧倒的なスピード解決: プロのエンジニアはオブジェクト構造やバージョン間の互換性を熟知しているため、エラー438の根本原因を瞬時に特定し、最短で復旧させます。
  • 業務停止リスクの回避: 稼働中の重要システムを安全に検証・修正するため、実業務への影響やデータの破損リスクを最小限に抑えられます。
  • コードの最適化と保守性の向上: 単にエラーを直すだけでなく、今後エラーが発生しにくい綺麗なコードへの書き換えや、マクロの動作高速化、ブラックボックス化の解消に向けたドキュメント作成なども併せて依頼可能です。

社内リソースだけで対応することが難しい場合や、自力での修正に少しでも不安を感じた場合は、被害が大きくなる前にプロの相談窓口を活用するのが、最もスマートで安心できる選択肢です。

Q. On Error Resume Next を使ってもエラー438を無視して良いケースはありますか?

どうしてもそのオブジェクトが特定のプロパティを持っているか事前に判定できない場合に限り、エラーを一時的にスルーして処理を分岐させる手法(例:エラーが発生したら代替処理を行う等)で使用することがあります。しかし、単にエラーを隠す目的で使用することは、データ欠損やバグの温床となるため推奨されません。原則として、事前にオブジェクトの型やプロパティの有無を正しく判定するコードを書くべきです。

Q. 自分でコードを変更していないのに、ある日突然エラー438が出るようになった原因は何ですか?

主な原因として、Excelのアップデートによる仕様変更、操作対象のファイル構造の変化(シート名の変更や列の追加など)、またはマクロが参照している外部システムやライブラリのバージョン変更が挙げられます。マクロが想定していたデータ構造やオブジェクトが変化した結果、実行時に間違ったオブジェクトを指してしまい、エラー438が発生することがあります。

Q. 実行時エラー438と、実行時エラー424「オブジェクトが必要です」の違いは何ですか?

エラー424は、「操作対象となるオブジェクトそのものが存在しない、またはセットされていない(空の)状態」を指します。一方、エラー438は「オブジェクト自体は実在するが、指定された命令(メソッドやプロパティ)をそのオブジェクトが持っていない状態」を指します。切り分けとして、変数が Nothing になっていないかを確認するのがエラー424、スペルやオブジェクトのメンバを確認するのがエラー438の対策になります。

Q. Mac版ExcelでWindowsで作成したマクロを開くとエラー438が出るのは防げますか?

Windows専用のコントロール(ActiveXコントロール)や、Windowsのシステムを直接操作するAPI、Windows専用の外部連携オブジェクト(FileSystemObjectなど)はMacではサポートされていません。これを防ぐには、Macでも動作する汎用的なVBA命令のみを使用するか、#If Mac Then などの条件分岐(条件付きコンパイル)を用いて、OSごとに処理を書き分ける必要があります。

Excel・VBAについてのご相談

Excel・VBAについてのご相談を受け付けています

現状の課題をお聞きし、最適な進め方をご提案します。まずはお気軽にご相談ください。