Excelマクロを実行した際に、突然「コンパイルエラー:参照設定が間違っています」や「ユーザ定義型は定義されていません」といったエラーが発生することがあります。このエラーは、VBAが参照している外部ライブラリ(スクリプト実行時ライブラリやOfficeオブジェクトライブラリなど)が、現在の環境で見つからない場合に起こります。特に、開発者とは異なるバージョンのOfficeがインストールされた社内PCでマクロを共有する場合に、この問題が頻発します。本記事では、エラーの原因を特定し、適切に修正する手順を詳しく解説します。
【要点】この記事で確認すること
- 最初に見る場所: VBAエディタの「ツール」→「参照設定」で、リスト内に「MISSING:」と表示されているライブラリがないか確認してください。
- 切り分けの軸: エラーの原因は主に「参照設定上のライブラリが未インストール」「Officeのバージョン違い」「64bit/32bitの違い」「ファイルパスの不一致」のいずれかです。
- 注意点: 会社PCでは管理者権限なしでライブラリをインストールできない場合があるため、不要な参照設定を外すなどの対応を優先してください。また、参照設定を変更するとマクロ全体の動作に影響するため、変更前のバックアップを取ることを推奨します。
ADVERTISEMENT
参照設定が見つからない原因と代表的な症状
参照設定エラーは、マクロが利用する外部ライブラリ(DLLやOLBファイル)が実行環境に存在しないか、パスが異なる場合に発生します。代表的な原因としては、以下の4つが考えられます。
| 原因 | 症状 | 対処法 |
|---|---|---|
| ライブラリが未インストール | 参照設定画面に「MISSING: Microsoft Scripting Runtime」などと表示される | 該当ライブラリをインストールするか、参照設定のチェックを外す |
| Officeのバージョン違い | 「Excel 14.0 Object Library」など、バージョン番号が不一致でエラーになる | 実行環境に合わせたバージョンの参照設定に変更する |
| 64bit/32bitの違い | Microsoft Common Controlsなどが64bit版Officeで利用できない | 64bit対応のコントロールを使用するか、コードを修正する |
| ファイルパスの不一致 | 外部ファイルを参照するライブラリが、指定されたパスに存在しない | 参照設定のパスを実際のファイル位置に合わせる |
これらの原因を特定するには、まずVBAエディタで参照設定の状態を確認します。ただし、複数の原因が重なっていることもあるため、一つずつ切り分けて対応する必要があります。
事前確認手順
修正を始める前に、次の2点を確認してください。これらがわかっていると、原因の絞り込みがスムーズになります。
確認1:Officeのバージョンとビット数
開発環境と実行環境のOfficeバージョンおよびビット数(32bit/64bit)が一致しているか確認します。Excelの「ファイル」→「アカウント」→「Excelのバージョン情報」で確認できます。ビット数は「バージョン情報」ウィンドウに表示されます。バージョンが異なる場合は、参照設定にリストされるライブラリのバージョン番号が変わる可能性があります。
確認2:マクロに使用されているライブラリのリスト
VBAエディタで参照設定画面を開き、チェックが入っているライブラリをメモします(特に「参照不可」と表示されているものがないか注目します)。この作業は、正常に動作するPCで行うと効率的です。リストを共有することで、管理者がライブラリのインストール状況を確認しやすくなります。
修正手順(5ステップ)
以下、具体的な修正手順をステップごとに説明します。
- VBAエディタを開く:Excelでマクロが埋め込まれたブックを開き、Alt+F11キーを押してVBAエディタを起動します。画面上部のメニューバーから「ツール」→「参照設定」をクリックします。
- 参照設定画面でMISSINGを確認する:参照設定の一覧で、先頭に「MISSING:」と表示されているライブラリがないか確認します。見つかった場合、そのチェックを外して「OK」をクリックします。これでエラーが解消する場合があります。
- 不足しているライブラリを追加する:マクロで本当に必要なライブラリ(例:Microsoft Scripting Runtime)がチェック外しでは困る場合は、参照設定画面の「参照」ボタンをクリックし、該当するDLLやOLBファイルを手動で選択します。通常は「C:\Windows\System32」や「C:\Program Files (x86)\Common Files」などのフォルダに格納されています。ファイルが見つからない場合はライブラリが未インストールの可能性があります。
- 参照優先順位を調整する:同じライブラリの異なるバージョンがリストに複数表示される場合、ドラッグして優先順位を変更できます。一般的には、実行環境にインストールされているバージョンに近いものを上位に持ってきます。ただし、通常はバージョンが異なっていても問題ないことが多いため、まずはMISSINGの有無に注力します。
- マクロのコード上で遅延バインディングに変更する(最終手段):参照設定に依存しない方法として、CreateObject関数を使ってオブジェクトを生成する方法があります。この場合、参照設定のチェックをすべて外し、コード内で変数をObject型で宣言します。ただし、コードの書き換えが必要で、開発者側で十分なテストが求められます。
手順2でチェックを外した場合、そのライブラリに依存するマクロの機能は使えなくなります。例えば、Scripting Runtimeを外すとFileSystemObjectが利用できなくなるため、別の方法でファイル操作を実装する必要があります。そのため、本当にそのライブラリが必要かどうかを事前に確認することが大切です。
ADVERTISEMENT
失敗パターンと追加の注意点
失敗パターン①:すべての参照設定を外してしまう
エラーを消そうとして、すべての参照設定のチェックを外してしまうと、マクロの基本的な機能(Rangeオブジェクトなど)も使えなくなり、まったく動作しなくなります。参照設定の一覧のうち、VBA本体の「Visual Basic For Applications」と「Microsoft Excel オブジェクト ライブラリ」は通常必須なので、これらのチェックは必ず外さないでください。
失敗パターン②:管理者権限なしでライブラリをインストールしようとする
「MISSING」のライブラリを追加するために、手動でファイルをコピーしようとしてもアクセス権限の問題で失敗することがあります。会社PCではシステムフォルダへの書き込みが制限されている場合が多いため、管理者に問い合わせる前に、不要な参照設定を外す対応を優先しましょう。
失敗パターン③:バージョン違いを無視して同じ参照設定を使い続ける
開発環境と実行環境でOfficeのメジャーバージョン(例:Office 2016とOffice 2019)が異なる場合、参照設定のバージョン番号が自動的に調整されず、エラーになることがあります。この場合は、実行環境で参照設定を開き、適切なバージョンのライブラリを選択し直す必要があります。
管理者に連絡すべきケースと伝える情報
以下のような状況では、社内のIT管理者やシステム管理者に連絡して対応を依頼してください。
- ライブラリが社内で標準的にインストールされていない場合(例:Microsoft Scripting Runtimeが一部のPCにのみインストールされている)
- 管理者権限が必要なフォルダへのファイル配置が必要な場合
- 参照設定の変更では解決せず、Officeのアドインや追加コンポーネントのインストールが必要と判断される場合
管理者に伝える情報としては、以下の項目をまとめるとスムーズです。
- エラーメッセージのスクリーンショット
- 問題のマクロファイル(マクロを含むExcelブック)
- 動作しなかったPCのOfficeバージョンおよびビット数
- 正常に動作するPCがある場合、そのOfficeバージョンや参照設定のリスト
よくある質問(Q&A)
Q1:参照設定を修正してもエラーが直りません。
原因として、まだ他にMISSINGのライブラリが残っているか、コード内の特定のオブジェクトが異なるライブラリに依存している可能性があります。参照設定画面で全ての項目を確認し、見落としがないか再チェックしてください。また、コードのコンパイルを実行(「デバッグ」→「VBAProject のコンパイル」)して、エラー箇所を特定することも有効です。
Q2:開発者と実行者のOfficeバージョンが異なります。どのように運用すべきですか?
理想的には、開発環境と実行環境のOfficeバージョンを統一することですが、それが難しい場合は、参照設定に「依存しない」遅延バインディングのコードに書き換えることを検討してください。また、実行環境で参照設定を開き、必要に応じて適切なバージョンのライブラリを選択する方法も使えます。社内で共通のテンプレートを配布する場合は、管理者側で標準の参照設定を決めておくとトラブルが減ります。
Q3:Late Binding(遅延バインディング)を使うと具体的にコードはどう変わりますか?
例えば、FileSystemObjectを使う場合、参照設定で「Microsoft Scripting Runtime」を有効にしているときは以下のように書きます。
Dim fso As New FileSystemObject
これを遅延バインディングに変更すると、次のようになります。
Dim fso As Object
Set fso = CreateObject("Scripting.FileSystemObject")
この方法では参照設定のチェックを外しても動作し、環境依存が少なくなります。ただし、CreateObjectで指定する文字列が間違っていると実行時エラーになるため注意が必要です。
まとめ
マクロ実行時の参照設定エラーは、異なるPC間でOffice環境が統一されていないことが主な原因です。最初にVBAエディタの参照設定画面で「MISSING:」を確認し、不要ならチェックを外すことで簡単に解決できるケースがあります。どうしても必要なライブラリが足りない場合は、管理者に連絡してインストールを依頼するか、コードを遅延バインディングに変更する方法を検討してください。参照設定の管理はマクロの保守性に直結するため、チーム内で共通のルールを決めて運用することをおすすめします。
ADVERTISEMENT
超解決 Excel・Word研究班
企業のDX支援や業務効率化を専門とする技術者チーム。20年以上のExcel・Word運用改善実績に基づき、不具合の根本原因と最短の解決策を監修しています。ExcelとWordを使った「やりたいこと」「困っていること」「より便利な使い方」をクライアントの視点で丁寧に提供します。
Office・仕事術の人気記事ランキング
- 【Word】差し込み印刷で数字の桁を整える!金額にカンマ(桁区切り)を入れる設定
- 【Teams】メッセージを「保存済み」にして後で読む!重要なチャットをブックマークして整理する技
- 【Copilot】「サービスに接続できません」エラーの原因切り分けと対処法
- 【PDF】PDFのサムネイルプレビューが表示されない!エクスプローラーの設定とAcrobat環境設定
- 【Excel】文字がセルの枠からはみ出す・隠れる!「折り返して表示」と「縮小して全体を表示」の使い分け
- 【PDF】PDFに入力した文字の「フォント・サイズ・色」を変更するプロパティ設定
- 【Word】校閲機能の基本!赤字(変更履歴)とコメントで修正を見える化する
- 【Outlook】添付ファイルが「Winmail.dat」に化ける!受信側が困らない送信設定
- 【Outlook】宛先が「オートコンプリート」に出ない・間違っている時の修正手順|履歴の削除と再構築
- 【PDF】結合するPDFの「用紙サイズ」がバラバラな時、すべてを「A4サイズ」に強制リサイズしてから結合する
