引き継いだVBAのマクロが「参照設定が見つかりません」で止まるのはなぜ?解析ツールで見つけ、直す順番を試した
引き継いだVBAのマクロを別のPCで開いて「参照設定が見つかりません」で止まるときは、VBEの[ツール]→[参照設定]を開き、頭に「参照不可」と付いた行を探します。見本にした架空のブック10本では7本に切れうる参照があり、手元のPC(Excel 16.0、64bit)で実際に止まったのは2本で、止めたのはどちらもOCX(昔のコントロール部品)の参照でした。型の宣言をCreateObjectに直しても、切れた参照が残るとエラーは消えませんでした。(2026年10月時点)
読み解きから直す・置き換えるまでの流れと費用はExcelマクロの引き継ぎのページにまとめています。
要点
- 「参照設定が見つかりません」で止まったら、VBEの[ツール]→[参照設定]で、頭に「参照不可」と付いた行を探します。
- 架空のブック10本のうち7本(参照11件)に、切れうる参照がありました。手元のPCで止まったのは2本です。
- 止めたのは、Common DialogとCommon Controls-2のOCXの参照2件だけで、5回とも同じエラー文でした。
- ScriptingとADODBは、参照を外すと5回とも止まり、CreateObjectに直すと0回になりました。切れた参照が残ると、直しても5回とも止まります。
目次
「参照設定が見つかりません」と出たら、最初にどこを見ますか?
VBEの[ツール]→[参照設定]を開き、頭に「参照不可」と付いた行を探します。Microsoftの説明では、見つからない参照にはこの画面でMISSINGが付きます。これが残る間は、コードを動かせません。
マクロを動かしたときの文面は、このPCでは「コンパイル エラー: プロジェクトまたはライブラリが見つかりません。」でした。原因はコードの中ではなく、コードの外にある参照設定です。
直し方はMicrosoftが3つ書いています。見つからないファイルをもとの場所に戻します。別の場所にあるなら、新しく参照を足して古い行を外します。
使っていないなら、行のチェックを外します。外す前に、そのライブラリを使う行がないかを確かめます。
参照設定はコードの外にあるので、文字を探すだけでは見つかりません。引き継ぎ書ではVBAの引き継ぎ書のひな形の9「動く条件」に、参照の一覧を書き足します。
引き継いだマクロ10本のうち、切れうる参照を持つのは何本ですか?
架空の10本では、7本に切れうる参照がありました。参照は合わせて11件で、種類はOCX・Scripting・ADODB・Outlook・Excelの旧版の5つです。残る3本は、標準の参照だけでした。
数え方はマクロの棚卸しの続きです。棚卸しで拾ったブックから解析ツール(olevba)でVBAを取り出し、ブックの中の参照の一覧を読みます。参照は「古いPCで作った」想定で、Office 14の場所やOCXの名前を書いた見本です。
7本のうち、手元のPCで実際に止まったのは2本でした。ほかの5本は、古い版を指していても動きました。
限界もあります。見本はExcelで保存したブックではなく、仕様書(MS-OVBA)の形式でスクリプトが書いたものです。7本という数も、見本に仕込んだ数です。実際の社内のブックの割合ではありません。
どの参照が切れて、どんなエラー文が出ましたか?
切れたのはOCXの参照だけで、「コンパイル エラー: プロジェクトまたはライブラリが見つかりません。」が5回とも出ました。Common Dialog 6.0とCommon Controls-2 6.0のどちらも同じです。この2つは、手元のPCにライブラリの登録がありませんでした。
Microsoftは、64bit版のOfficeは32bitのバイナリを読み込めないと説明しています。対象には、MSComCtlのTreeViewなどと、MSComCt2のDateTimePickerなどが入ります。Office 2010より前の32bit版が入れた部品です。PCを64bitに替えると、この種類から切れます。
ほかの4種類は、5回とも動きました。Outlook 14.0とExcel 14.0を指す参照は、手元のPCでは新しい版として読めました。ほかのPCで同じになるかは、確かめていません。
新しいOutlookに替えたときの止まり方は、参照とは別の話です。新しいOutlookでマクロが動かない理由に、エラー429などの文面をまとめました。
遅延バインディングに直せば、参照切れは起きませんか?
外れた参照については、起きなくなります。ただし「参照不可」の行が残っていると、直した後も止まります。ScriptingとADODBでは、同じ処理を5回ずつ動かして確かめました。
参照を外すと「ユーザ定義型は定義されていません。」が5回とも出ました。これをCreateObjectの書き方に直すと、エラーは0回になりました。直す前後は次のとおりです。
' before: 型で宣言(参照設定に Microsoft Scripting Runtime が要る)
Dim fso As Scripting.FileSystemObject
Set fso = New Scripting.FileSystemObject
' after: 遅延バインディング(参照設定は要らない)
Dim fso As Object
Set fso = CreateObject("Scripting.FileSystemObject")
一方、OCXの参照が「参照不可」のまま残るブックでは、CreateObjectに直したマクロも5回とも止まりました。直すのは、コードと参照の両方です。
遅延バインディングには、失うものもあります。MicrosoftのProject向けの説明は、ProgIDで作るオブジェクトは編集中にメンバーが見えず、性能も劣ると書いています。できれば参照を足して型で宣言するよう勧めています。直す範囲は、引き継ぐ先のPCで揃わないライブラリに絞ります。
PCやExcelの版を替えるとき、どの順で確かめますか?
先に、ブックごとの参照の一覧を解析ツールで数えて、棚卸しの表に足します。その後、切れうる種類から順に、次のように確かめます。
- OCXの参照:PCを64bitのOfficeに替えるなら、先に代わりの部品を決める。Microsoftの説明では、これらは32bit版のOfficeが入れたものです。
- Outlookの参照:従来のOutlookが前提のマクロは、新しいOutlookに替えると止まる。参照を直しても解決しない。
- Excelの旧版を指す参照:PCの更新で版が上がるときは、Excel 2021の提供終了の前後に、新しい版で一度開いて確かめる。
- 64bit化:Declare文のPtrSafeは参照とは別の原因です。同じPCでの結果は、シート名や列を変える実験に書きました。
確かめた結果は、引き継ぎ書に「どのPCで、どの参照が切れたか」として残します。次の人が、同じ画面を開かずに済みます。作った人がいないマクロ全体の読み方は、Excelマクロの引き継ぎにまとめています。どの手続きがどの部品を呼ぶかは呼び出しの図で洗い出し、直すか置き換えるかの比べ方は移行先の比較に、金額は導入例(イメージ)にあります。
このサイトで相談するには?
どのブックのどの参照を残し、どれを直すかは、PCの台数や使うブックで変わります。何をどう頼むか決まっていなくても大丈夫で、準備は要りません。マクロの守りが、御社のやり方に合わせて、進め方を一緒に考えます。無料で相談する
よくある質問
- 「参照不可」の行のチェックを外すだけで直りますか?
- そのライブラリを使う行がマクロになければ直ります。使う行が残っていると、外した後に「ユーザ定義型は定義されていません。」が出ます。
- 遅延バインディングに直せば、参照切れは起きなくなりますか?
- 外れた参照については、5回とも動きました。ただし「参照不可」の行が残っていると、直した後も5回とも止まりました。
- Excelを新しい版に替えると、参照設定は必ず切れますか?
- いいえ。Office 14.0を指す参照は、この手元のPCでは5回とも動きました。切れたのはOCXの参照だけでした。
- 「参照不可」がどこにも見当たらないのに止まるのはなぜですか?
- 参照の一覧にはなくても、PtrSafeのないDeclare文など別の原因で止まります。VBEの[デバッグ]→[コンパイル]で、止まる行を確かめます。
この記事の実験・計算の条件
架空のマクロ付きブック10本と、参照1種類ずつのブックを各5回。Windows 11、Microsoft 365 Apps 16.0(ビルド20430、64bit)。2026年10月17日、筆者のPC。
出典
- Microsoft Learn「Can't find project or library」(2019年8月14日、2024年2月1日更新)(2026年10月17日確認)
- Microsoft Learn「Database contains a missing or broken reference」(2025年5月26日)(2026年10月17日確認)
- Microsoft Learn「Compatibility between the 32-bit and 64-bit versions of Office」(2021年10月27日、2024年12月18日更新)(2026年10月17日確認)
- Microsoft Learn「OLE programmatic identifiers, late binding, and early binding (Project)」(2019年6月8日、2024年1月24日更新)(2026年10月17日確認)
- マクロの守りの計測(2026年10月17日、Windows 11・Microsoft 365 Apps 16.0 ビルド20430 64bit・oletools 0.60.2。架空のブック10本)。scripts/figs/vba_reference_missing.py(2026年10月17日確認)