3.3 エクセルアドイン開発

EXCEL2010をでもこの方法は通用するようです。
ただし、参照設定はVBE側で指定する必要があるようです。
また、アドインのVBAProject名も念のため変更しておいた方が良さそうです。
テストした時は、本体のブックを「xlsm」、アドインを「xlam」で作成しました。
 
アドインの作り方
作り方自体は簡単です。

1.VBAでプログラムします。念のためプロジェクト名を任意の名称に変更しておいてください。
2.ブックを保存する時、拡張子を「.xla」で保存します。

3.xlaファイルをVBエディタ画面のメニュー「参照設定(R)」→「アドイン(I)」でサブ画面を開き、「参照(B)」ボタンを押してブラウズし、登録します。

上記1〜3の方法によって、xlaファイルの標準モジュールでPublicで宣言した変数やプロシージャを、共通の変数や関数として使用できるようになります。ですが、これだけだと、使いどころがあまり多くありません。


アドインツールの作成
というわけで筆者が良く使うアドインツールを簡単な例で紹介します。
シート上で右クリックした時に表示されるショートカットメニューに項目を追加して、アドインのプログラムを呼び出せるようにします。

1.とりあえず、アドインの機能としては、以下を標準モジュールに記載し、上記の要領でアドインを作成します。

Public Sub AdinTest()
    Msgbox "AdinTest"
End Sub

2.さらに、アドインファイルのThisWorkbookクラスシートに、以下のイベントプロシージャを記述します。
ブックオープン時の処理で、シート右クリック時のメニューに「AdinTest」を呼び出す項目を追加します。

Private Sub Workbook_Open()
    Dim cmdBr As CommandBar
    Dim cmdBtn As CommandBarButton
    
    'コマンドバーの取得
    Set cmdBr = Application.CommandBars("cell")

    'コマンドバー項目の作成
    '引数Temporaryには必ずTrueを指定してください
    Set cmdBtn = cmdBr.Controls.Add(msoControlButton, , , , True)
    
    'コマンドバー項目に属性を追加
    With cmdBtn
        '項目の上に区切り線をつける
        .BeginGroup = True
        '呼び出すサブプロシージャ名
        .OnAction = "AdinTest"
        '項目の表示名
        .Caption = "テスト項目"
    End With
End Sub

3.アドインを作成したら一旦EXCELを終了し、もう一度起動して、アドインファイルをEXCELのメニューからアドインに登録します。

4.うまく行くと、ショートカットメニューに以下のように表示されます。
ワークシート上のセル上で右クリック。
ただし、表示が「改ページプレビュー」だと表示されないので、「標準」にしてください。
余談
コマンドバー「CELL」は二つ存在し、1つが標準表示、もう一つが改ページプレビュー表示用のようです。
改ページプレビュー表示時にも項目を追加するには、両方のコマンドバーに項目追加を行う必要があります。
For EachでCommandBarsコレクションのアイテムをチェックして名前が「CELL」だったら項目追加という処理になると思います。


5.選択するとメッセージが表示されます。


注意事項
1.アドインに記述する際、対象のワークブック、ワークシートなどを、明示的にActiveWorkbook、ActiveSheet、ActiveCellと指定してください。そうしないと、アドインファイルのブックやシートを対象にしてプログラムが処理されます。逆にアドインファイルのブックやシートを指定する場合はThisWorkbook.Worksheetsと記述します。
2.コマンドバーコントロールを作成する際、Temporary引数には必ずTrueを指定してください。指定すると、EXCELの終了とと共に追加した項目も削除されます。指定しないと、削除しない限り残ってしまいます。
3.「OnAction」プロパティに指定できるのはサブプロシージャ、引数なしのみです。