「えっ、なんで? 昨日まで動いてたじゃん…」
月末の締め作業中、Excelマクロを実行したら急に画面に現れる「コンパイルエラー:プロジェクトまたはライブラリが見つかりません」というメッセージ。
しかも、ハイライトされているのは、あの超基本的なLeft関数。
「Left関数なんて、書き間違えるはずがない!」と、思わず叫びたくなってしまいますよね。
この記事では、VBAでLeft関数(やRight関数、Mid関数など)が突然エラーを起こす原因と、誰でも今すぐ実行できる解決策を分かりやすく解説します。
なぜ、使い慣れたLeft関数が動かなくなるのか?
結論から言うと、この現象の原因は、多くが「参照設定の迷子(参照不可)」によるものです。
本来、VBAは非常にスマートです。「Left」と記述するだけで、「これは文字列の左端を抽出する機能だな」と阿吽の呼吸で理解してくれます。
しかし、新機能の追加や、別のパソコンへのファイル移行などを行うと、VBAが参照する「辞書(ライブラリ)」の中に、読み込めない項目(行方不明の辞書)が混ざってしまうことがあります。
するとVBAはパニックになります。
「必要な辞書が見当たらない! 何を信じていいか分からないから、基本機能も全部エラーにしてしまおう! Left関数? そんなの知らないよ!」これが、理不尽に見えるエラーの正体です。
解決策1:一番確実な「完全修飾」【おすすめ】
一番早くて、今後もエラーが起きにくい方法をお教えします。
それは関数に「名字(ライブラリ名)をつけて呼んであげる」ことです。
VBAの世界では、Left関数は「VBA」というライブラリの「Strings」クラスに所属しています。なので、こう書いてあげてください。
修正前
sResult = Left(sText, 2)
修正後
sResult = VBA.Left(sText, 2)
やり方はとても簡単で、「VBA.」を頭につけるだけです。これを専門用語で「完全修飾」と呼びます。
こうすることで、たとえ他の参照設定に不備があっても、Excelは迷わず「VBAライブラリに所属しているLeft関数ですね」と正しく認識できるようになります。
【コピペで使える】安全な文字列操作コード例
RightやMid、Trimも同じ現象が起きやすいので、セットで覚えておきましょう。
Sub SafeStringManipulation()
Dim sTarget As String
sTarget = " Hello VBA World "
' Left関数:左から5文字を抽出
' 以前:Debug.Print Left(sTarget, 5)
Debug.Print VBA.Left(sTarget, 5)
' Right関数:右から5文字を抽出
' 以前:Debug.Print Right(sTarget, 5)
Debug.Print VBA.Right(sTarget, 5)
' Trim関数:両端のスペース削除
' 以前:Debug.Print Trim(sTarget)
Debug.Print VBA.Trim(sTarget)
MsgBox "処理が完了しました!", vbInformation
End Sub
解決策2:根本原因「参照不可」を直す
「VBA.」を付与するのは、いわば応急処置です。「環境そのものをスッキリ整理したい」という場合は、以下の手順で根本から解決しましょう。
- VBAの編集画面(VBE)を開く。
- メニューバーの [ツール] > [参照設定] をクリック。
- リストの中に 「参照不可:MISSING…」 と書かれている項目がないか探す。
- もしあれば、そのチェックを外して [OK] を押す。
これでVBAの混乱が収まり、通常の「Left」という記述でも正しく動作するようになります。
※ただし、その「参照不可」だった機能自体をコード内で使用していた場合は、別途そのライブラリを入れ直す必要がある点にご注意ください。
まとめ:これからは「VBA.」をつける習慣を
いかがでしたか?
急なエラーはストレスフルですが、原因さえ分かれば恐れることはありません。
私の経験上、予期せぬトラブルを避けるために、あえて最初から VBA.Left や VBA.Right と書く癖をつけている人もいます。
これを機に、あなたも「VBA.」をつけるコーディングを取り入れてみてはいかがでしょうか。
VBAを独学で学び、業務自動化に5年以上携わってきた私が、「本当に実務で役立った!」と感じた2冊を紹介します。 もう本選びで失敗したくない方は、よければ参考にしてみてください。

コメント