参照設定ってそもそも何?
まず一番やさしく言うと、
参照設定=「VBAに、この道具(ライブラリ)を使っていいよ、と事前に教える設定」です。
Excel VBAは、最初から「Excelの基本機能」は使える状態になっています。
でも、たとえば
- ファイルやフォルダを便利に扱いたい(Scripting.Dictionary など)
- Outlook を操作したい
- Access や他のOfficeアプリと連携したい
といった「ちょっと高度な道具」を使いたいときは、
VBAに「このライブラリを使います」と宣言してあげる必要があります。
その宣言が「参照設定」です。
参照設定をすると、そのライブラリのオブジェクトや定数、メソッドが
・コード補完(IntelliSense)に出てくる
・型として宣言できる
ようになり、書きやすく・間違えにくくなります。
参照設定の画面を開く手順
参照設定ダイアログの出し方
VBE(Alt+F11)を開いた状態で、次の順番で操作します。
上部メニューの「ツール」をクリックする。
その中の「参照設定」をクリックする。
すると、「参照設定」というダイアログが開きます。
上の方にチェックボックス付きの一覧がずらっと並んでいて、
下の方に「参照不可」などの表示が出ることもある、あの画面です。
ここでチェックを付ける=「このライブラリを使います」と宣言する、ということになります。
具体例1:Scripting.Dictionary を使うための参照設定
参照設定なしで書こうとするとどうなるか
たとえば、よく出てくる「Dictionary」を使いたいとします。
参照設定をしないまま、いきなりこう書くとします。
Sub TestDic()
Dim dic As Dictionary
Set dic = New Dictionary
End Sub
VBこの状態で保存しようとすると、
「ユーザー定義型が定義されていません」
というコンパイルエラーが出ます。
VBAが「Dictionary っていう型、知らないんだけど…」と言っている状態です。
ここで必要になるのが「参照設定」です。
参照設定を追加してから書く
同じコードを動かすために、次のようにします。
- VBE で「ツール → 参照設定」を開く
- 一覧の中から「Microsoft Scripting Runtime」にチェックを入れる
- OK を押して閉じる
これで、VBAは「Scripting Runtime というライブラリを使っていい」と認識します。
その状態で、次のコードを書きます。
Option Explicit
Sub TestDic()
Dim dic As Dictionary ' 型として認識される
Set dic = New Dictionary ' New もOK
dic.Add "A", 100
dic.Add "B", 200
MsgBox dic("A")
End Sub
VB今度はエラーにならず、ちゃんと動きます。
さらに、Dim dic As Dictionary と書くときに、
Dictionary がコード補完に出てくるようになります。
ここで感じてほしいのは、
- 参照設定をすると「型として宣言できる」
- コード補完が効くので、スペルミスもしにくい
- エラーも「コンパイル時」に出てくれるので安全
というメリットです。
参照設定をしない書き方(遅延バインディング)との違い
参照設定なしでも動かす方法
実は、参照設定をしなくても Dictionary を使う方法があります。
それが「遅延バインディング」と呼ばれる書き方です。
Option Explicit
Sub TestDicLate()
Dim dic As Object
Set dic = CreateObject("Scripting.Dictionary")
dic.Add "A", 100
dic.Add "B", 200
MsgBox dic("A")
End Sub
VBこの書き方なら、参照設定は不要です。
ただし、
- dic の型が Object なので、コード補完が効きにくい
- メソッド名やプロパティ名をスペルミスしても、実行するまで気づけない
というデメリットがあります。
超初心者におすすめなのは「まずは参照設定して事前バインディング」
用語はさておき、超初心者のうちは
- 参照設定をして
- きちんと型を指定して(As Dictionary など)
- コード補完に頼りながら書く
というスタイルの方が、圧倒的に学びやすいです。
慣れてきたら、「参照設定なしで書く理由」(配布先の環境差など)も見えてきますが、
最初は「参照設定して、型をちゃんと書く」ほうが、エラーの原因が見えやすくて安心です。
参照設定が原因で起こりがちなトラブル
「参照不可(MISSING)」状態
他の人からもらったブックを開いたとき、
「ツール → 参照設定」を見ると、一覧の一番上に
「参照不可:〇〇〇〇」
のような項目が出ていることがあります。
これは、「そのブックが参照しているライブラリが、そのPCには存在しない(またはパスが違う)」状態です。
この状態だと、関係なさそうなコードまでコンパイルエラーになったりします。
超初心者向けの対処としては、
- そのライブラリが本当に必要か分からない場合 → いったんチェックを外して OK を押す
- 明らかに必要(Outlook 操作など)な場合 → そのPCに対応するバージョンのライブラリを探してチェックし直す
という感じになります。
「参照不可」があるときは、まず参照設定を疑う、という癖をつけておくと、
「なんで急にエラーだらけ?」というときに原因にたどり着きやすくなります。
「ユーザー定義型が定義されていません」などのエラー
さっきの Dictionary の例のように、
- As Dictionary
- As Outlook.Application
- As ADODB.Connection
などと書いたときに、「ユーザー定義型が定義されていません」と怒られたら、
「その型を提供しているライブラリの参照設定が足りていない」可能性が高いです。
エラーが出た型名を見て、
「これはどのライブラリの型だろう?」
と逆引きして、参照設定を追加する、という流れになります。
超初心者向け「参照設定」の実践的な考え方
まずは「標準のままでいい」からスタートしてOK
普通の Excel 操作(セルの値を読む・書く、シートを操作する程度)なら、
参照設定をいじらなくても十分にマクロは書けます。
なので、最初のうちは
- 参照設定は「触らなくても動く」
- でも「外の世界(Outlook、Access、ファイルシステムなど)と連携したくなったら出番」
くらいの認識で大丈夫です。
「型をちゃんと書きたい」と思ったら、参照設定を意識する
少し慣れてきて、
- Dictionary を使いたい
- Outlook を操作したい
- ADO でデータベースに接続したい
といった場面が出てきたら、そのとき初めて
「この機能を使うには、どの参照設定が必要なんだろう?」
と調べる、という順番で十分です。
そのときに、
- ツール → 参照設定 を開いて
- 該当するライブラリにチェックを入れて
- 型をきちんと書いて、コード補完に頼る
という流れを一度経験しておくと、
「参照設定って、そういう“道具箱の許可”なんだな」という感覚がしっかり身につきます。
まとめ
参照設定は、
「VBAに、このライブラリ(道具)を使っていいよ、と事前に教える設定」です。
ツール → 参照設定 から、使いたいライブラリにチェックを入れることで、
そのライブラリの型やメソッドを、型宣言付きで安全に使えるようになります。
超初心者のうちは、
- まずは参照設定なしで、Excel標準の機能だけでマクロに慣れる
- そのうち「Dictionary 使いたい」「Outlook 触りたい」となったら、参照設定を一つずつ試してみる
というステップで進むのが、いちばんストレスが少ないです。
