このページで説明しているように、ある業務ワークブック特有のマクロでもアドイン化することで改廃に対する対応が楽になり、複数のワークブックに対してもアドインが一つで済むためリソース軽減にもつながります。ここではその実装方法について説明します。
単純なものではないため、サンプルを用意して「はいどうぞ」という訳にはいきません。ですが「たたき台」となるサンプルは最後に用意いたしました。

アドインとは!?

まず、「アドイン」の説明からしておかなければなりません。別に「アドイン」とはこういうものだ、とか、こうあるべきだ、を論議するつもりはありません。「配布の問題」で取り上げる「アドイン」とはこういうものを指しているという説明です。
メニューバーにある「アドイン」のこと?
マクロを使わない方でも、Excelを操作していて、「ツール」メニューの中に「アドイン」という項目があるのをご存じの方も多いと思います。
ツールメニューの「アドイン」
これを選択すると、
ツールメニューをアドインを選択したところ
「アドイン」のダイアログが表示され、Excel標準で搭載されている追加機能や、AcrobatVisioなどをインストールされている環境では連携機能(主にツールバーの追加)が選択できるようになっています。
ここにユーザーが「便利機能」などの汎用的なマクロを作成し、アドインとして保存したものをインストールさせて、このリストに追加させることもできますが、この章で説明しようとしている「アドイン」はちょっと違います。
このダイアログのリストに追加することもしません。

目的は「データ」と「仕組み」の切り離し
前の章で説明している通り、目的は「ユーザーデータが入力されるワークブックとマクロの切り離し」です。
主要プログラムをアドインに収容する。
つまり、データのワークブックと、マクロのワークブックがあって分離されて機能すれば目的は達せられますが、マクロのワークブックが「ワークブック」としてExcelのウィンドウに表示されてしまうのは不都合です。
「アドイン」であれば、他のワークブック同様にマクロからOpenメソッドで開くことができますが、Excelのウィンドウにはワークシートとして表示されないのです。開いているワークブックの数をWorkbooks.Countで調べても計上されません。

では、簡単な実験してみましょう。
アドイン化の実験
まず、このように新しいワークブックを2つ開きます。新規にExcelを開いたところから行なうと、「Book1」「Book2」となると思います。
次にVBEを開きます。
Visual Basic Editorを開いたところ
このように左のプロジェクトエクスプローラには「Book1」「Book2」が表示され、表示メニューから「イディミエイト ウィンドウ」を選択して、開いているワークブックのカウントを見ると、「2」と表示されます。
ここで、「Book2」をアドインにして見ますが、まず、簡単なマクロを仕込んでおきます。
Book2にマクロを仕込む。
Module1(標準モジュール)を追加して、簡単なマクロを書き込んでおきます。

次に、「Book2」をアドインにしてみましょう。
プロパティウィンドウを表示
「プロパティウィンドウ」を表示させて、プロジェクトエクスプローラで「Book2」の「ThisWorkbook」をクリックします。プロパティに表示される項目の中にIsAddinプロパティがあり、「False」になっています。
これを「True」に変更すればアドインとして機能します。
IsAddinプロパティをTrueに変更した。
True」に変更しても、VBE側では何も変化が起きませんが、Excelのウィンドウに戻ると、
Book2が消えた
このように、「Book2」は消えてしまいます。(ウィンドウメニューにも表示されません。)

作成したマクロはどうなったかというと、
マクロの消えてしまった。
Book2」で作成されたマクロは表示されなくなりました。では「Book1」側からどのように「Book2」のマクロを動作させるのでしょうか。
VBEに戻ると、「Book2」は閉じてしまったのではないことが確認できます。
Book1にマクロを追加する。
では、「Book1」の方に標準モジュールを追加して、Runメソッドで「Book2」側の「TEST1」プロシージャを起動させてみましょう。このように記述できたら、もう一度Excelのウィンドウに戻ってマクロを起動してみて下さい。
Book2のTEST1プロシージャが起動された。
このように、アドインとなった「Book2」のプロシージャ「TEST1」が動作したのが判ります。

本来の目的に利用できるでしょうか。
このサンプルでは、保存させていないのでブック名に拡張子がありませんが、「アドイン」だからと言って拡張子が「*.xla」でなければならないわけではありません。ですが、「*.xla」で保存させたワークブックは、開いた時にアドインとして認識されます。
Excelウィンドウから消えてしまったため、名前を付けて保存ができない状態ですが、空のワークブックにマクロだけを実装して、アドイン作成ツールを使えば、元のワークブックのコピーをアドインに変換できます。
このような方法で、アドイン呼び出し部分以外のメインとなるマクロプログラムをアドインにしてしまえば、機能の改変が発生してもアドインだけを変更するだけで済むわけです。
アドイン側からカスタムツールバーを表示させるようにしてしまえば、機能追加に対する起動ボタンもアドイン側だけで自在に追加・変更できるので、元のワークブック側に実装させなければならないコード記述はかなり画一化させることができるようになります。
当初の目的は「データ」と「仕組み」の切り離しです。そういう意味では、別にウィンドウが見えていて構わないのであればアドインでなくても構わないし、ワークブックのままでウィンドウを非表示にする方法もあるでしょう。 「アドイン」ということで拡張子が区別されるので、フォルダ内の「見た目」で区別しやすいなどというメリットもあります。