AddIns

AddIns

 アドインとは、プログラムに拡張した機能を追加させるという意味であり、Excelに追加するアドインのことをExcelアドインと呼びます。Excelアドインを追加すると、Excelに独自のコマンドや機能が追加されます。
 アドインの存在を知っている方は多いと思いますが、実際に使用や、作成されている方は少ないのではないでしょうか。
 アドインは、Excelに機能を追加するまでに手間がかかりますが、それを凌ぐメリットがあります。ここでは、アドインの追加や作成方法、そして備考について記していきます。

※Excelでのアドインはいくつかの種類があります。一つは、上記のExcelアドイン。その他に、他言語で作成されたCOMアドインやオートメーションアドインがあります。ここでは、一般的に使用されるExcelアドインについて説明していきます。

アドインのメリット・デメリット

【メリット】
 ・一度追加すると、どのブックであっても拡張された機能を使用できる
 ・ブックに、新規にマクロを追加する必要がない
 ・拡張機能のon/offを手軽に行える

【デメリット】
 ・機能を追加するために、インストールと組み込みが必要
 ・アンインストールに手間がかかる
 ・アドインの作成しだいでは不具合が起こる
 ・Excelの起動に若干時間がかかるようになる

仕組み

 Excelアドインは非表示のブックです。
 Excel本体が起動した際に、組み込まれているアドイン(非表示ブック)も同時に開き、そのアドインのマクロが使用できるようになるのです。
 インストールしたアドインは「C:\Users\ユーザー名\AppData\Roaming\Microsoft\AddIns」といったような、深い階層にに保存されます※。
 ここに保存されたアドインの中で、ユーザーがExcelに組み込んだものが、Excelの起動と同時に立ちあがります。アドインを大量に組み込むと、Excelの起動が遅くなるのは、これが要因です。


※上記フォルダをユーザーアドインライブラリと呼び、そこにアドインファイルを保存することを、便宜上インストールと言っています。

※AppDataフォルダは、通常、非表示になっています。  「フォルダと検索のオプション」→「表示」→「すべてのファイルとフォルダを表示する」を選択すると表示されます。大切なフォルダのため、フォルダ内のファイル等の移動や削除には注意が必要です。

※ExcelのバージョンやOSによって、該当フォルダの場所は異なります

インストール

インストールをする方法を3つ紹介します。

・手動でアドインライブラリ探し、アドインファイル移動する
 フォルダの表示設定が必要であったり、深い階層を検索するため、あまりお薦めしません。

・アドインインストールを支援するソフトを利用する
 お薦めの方法ですが、ソフトが必要です。よければ、拙アドインインストール支援ソフトをどうぞ。

・Excelの「名前を付けて保存」の機能を利用
  1.該当のアドインファイルを右クリックでコピー
  2.次にExcelを立ち上げ、新規ブックで「名前を付けて保存」を選択
  3.「ファイルの種類」でExcel2003以前は「.xla」、Excel2007以降は「.xlam」を選択
  4.アドインライブラリが表示されるので、フォルダ内で右クリック、貼り付け

組み込み

アドインライブラリに保存されたファイルは、アドインマネージャーに表示されます。
Excelにアドインを組み込む場合は、そのアドインマネージャーの該当アドインにチェックを、入れ「OK」を押します。

アドインマネージャー


アドインマネージャーの表示
 Excel97-2003・・・「ツール」→「アドイン」
 Excel2007・・・「Officeボタン」→「Excelのオプション」→「アドイン」→「設定」
 Excel2010・・・「ファイル」→「Excelのオプション」→「アドイン」→「設定」

アンインストール

アンインストールの方法を3つ紹介します。

・手動でアドインライブラリ探し、該当アドインファイル削除する
 インストールと同様、あまりお薦めしません。

・ソフトを利用
 インストールと同様、よければ、拙アドインインストール支援ソフトをどうぞ。

・Excelの「名前を付けて保存」の機能を利用
 1.アドインマネージャーで該当のアドインの組み込みを解除
 2.次にExcelを立ち上げ、新規ブックで「名前を付けて保存」を選択
 3.「ファイルの種類」でExcel2003以前は「.xla」、Excel2007以降は「.xlam」を選択
 4.アドインライブラリが表示されるので、該当アドインファイルを右クリック、削除

作り方

 アドインファイルの作り方は大きく分けて3つのステップです。

 1.行いたい処理を書いたブックを作成する
 2.アドイン用のコードを記述する
 3.アドインファイルとして保存する

 次は、実際の作成例です。

◆1.行いたい処理を書いたブックを作成
 ここでは新規ブックの標準モジュールに、「選択範囲の値をランダムに入れ替える」処理を記述。

Sub Rand_Value() '選択しているセル範囲内の値をランダムに入れ替える

    Dim lngI As Long, lngII As Long, lngRow As Long, lngCol As Long
    Dim lngRnd As Long, lngRowsC As Long, lngCount As Long, lngCellsC As Long
    Dim lngValue() As Long
    Dim bolFlg() As Boolean
    Dim varData As Variant, varResult() As Variant, varSelection() As Variant

    With Application
        If TypeName(.Selection) <> "Range" Then Exit Sub
        .ScreenUpdating = False
        With .Selection
            If 1 < .Areas.Count Or .Cells.Count = 1 Then Exit Sub
            varResult = .Value
            varSelection = .Value
            lngRowsC = .Rows.Count
            lngCellsC = .Rows.Count * .Columns.Count
            Randomize
            lngCount = 1
            ReDim bolFlg(1 To lngCellsC)
            ReDim varData(1 To lngCellsC)
            ReDim lngValue(1 To lngCellsC)
            Do
                lngRnd = Int(lngCellsC * Rnd()) + 1
                If bolFlg(lngRnd) = False Then
                    bolFlg(lngRnd) = True
                    lngValue(lngCount) = lngRnd
                    lngCount = lngCount + 1
                    If lngCellsC < lngCount Then Exit Do
                End If
            Loop
            lngCount = 0
            For lngI = 1 To .Rows.Count
                For lngII = 1 To .Columns.Count
                    lngCount = lngCount + 1
                    lngRow = ((lngValue(lngCount) - 1) Mod lngRowsC) + 1
                    lngCol = (lngValue(lngCount) + lngRowsC - 1) \ lngRowsC
                    varResult(lngI, lngII) = varSelection(lngRow, lngCol)
                Next lngII
            Next
            .Value = varResult
        End With
        .ScreenUpdating = True
    End With
End Sub

◆2.アドイン用のコードを記述 重要
 アドインファイルのマクロは、マクロダイアログボックスに表示されません。そのため、メニューバーや、右クリックのメニューに、コマンド実行用ボタンを登録して使用するのが一般的です。
 そのため、アドインファイルには、「任意の場所にコマンド実行用ボタンを作成」「コマンド実行用ボタンにマクロを登録」「ファイルを閉じる際にボタンを削除」といった、特有の処理が必要になります。


 アドイン用のコマンド実行ボタンの登録処理は、ThisWorkbookオブジェクトに記述します。
 理由は、ブックを開く際に実行されるWorkbook_Open()といったイベントプロシージャを利用するためです。
 一般的には、ブックを開く(又はインストール)時に、コマンド実行ボタンを登録、ブックを閉じる(又はアンインストール)時に、そのボタンを削除します。
 注意すべきポイントは、ボタンの重複登録やエラーを避ける処理が必要になることです。その処理については、次のChack_Addinモジュールを参考にして下さい。

Option Explicit
Const conAddinName As String = "サンプル(&S)..."
'-------------------------------------------------------------------------------------------------------

Private Sub Workbook_Open() 'アドインファイルが開かれた際に実行
    Call Chack_Addin
    With Excel.Application
        'セルの右クリックメニューへの登録
        With .CommandBars("Cell").Controls.Add(Temporary:=True)
            .FaceId = 59 'ボタンにアイコンを表示
            .BeginGroup = True 'グループ線を引く
            .Caption = conAddinName 'アドインの名前登録
            .OnAction = "Rand_Value" '実行するマクロ
        End With
        'メニューバーへの登録
        With .CommandBars("Worksheet Menu Bar").Controls. _
                Add(Temporary:=True, Type:=msoControlPopup)
            .Caption = conAddinName
            With .Controls.Add(Type:=msoControlButton)
                .Caption = conAddinName
                .OnAction = "Rand_Value"
            End With
        End With
    End With
End Sub
'-------------------------------------------------------------------------------------------------------

Private Sub Chack_Addin() 'コマンドを検索し、既にコマンドがあればそれを削除
    Dim objCC As CommandBarControl
    With Excel.Application.CommandBars
        With .Item("Cell")
            For Each objCC In .Controls
                If objCC.Caption = conAddinName Then .Controls.Item(conAddinName).Delete
            Next
        End With
        With .Item("Worksheet Menu Bar")
            For Each objCC In .Controls
                If objCC.Caption = conAddinName Then .Controls.Item(conAddinName).Delete
            Next
        End With
    End With
End Sub
'-------------------------------------------------------------------------------------------------------

Private Sub Workbook_AddinUninstall() 'アドインの組み込み解除時に実行
    Call Chack_Addin
End Sub

◆3.アドインファイルとして保存する
 「名前を付けて保存」を選択し、ファイルの種類でExcel97-2003なら「.xla」、Excel2007以上なら「.xlam」を選択します。自動的にAddInsフォルダに移動するので、そこに任意の名前を付けて保存しましょう。


 アドインを保存後に、Excelを一旦終了し、再度立ち上げ、アドインマネージャーを表示すると、上記のアドインが追加されています。そのアドインにチェックを入れ「OK」を押すと、次のようにメニューバーとセルの右クリックメニューにコマンドが表示されます。



サンプルファイルを準備しました。試したい方は、ダウンロードしてみて下さい。
サンプル.xls

【サンプルファイルの使用法】
 サンプルファイルは通常のExcelブックです。ダウンロードしたものをアドインファイルとして保存して使用します。

 1.サンプルファイルを開き「名前を付けて保存」
 2.「ファイルの種類」を「.xla」又は「.xlam」に設定
 3.「保存」
 4.Excelを一旦閉じ、再度立ち上げ、アドインマネージャーを表示。アドインマネージャーの表示
 5.「サンプル」にチェックを入れ「OK」 終了

備考

◆VBAプロジェクトのロック
 マクロのコードをユーザーに見られたくない場合があります。そのような時はVBAプロジェクトにロックをかけます。
 1.「VBAProject」を右クリック→「VBAProjectのプロパティ」→ダイアログボックスが表示されます。


 2.「保護」→プロジェクトを表示用にロックするにチェックを入れ、パスワードを設定します。
 その状態でそのブック(アドインファイル)を保存すると、次からそのブックを開き、マクロを編集する際にパスワードが必要になります。


◆アドインファイルのシートを非表示にする
 ThisWorkbookオブジェクトを選択→プロパティウィンドウのIsAddinプロパティの値をTrueに設定。
 プロパティウィンドウが表示されていない場合は、「表示」→「プロパティウィンドウ」で表示されます。


◆アドインマネージャーに表示される名前
 特に設定していなければ、そのブックの名前がアドインマネージャに表示されます。  しかし、ブックのドキュメントプロパティのタイトルを設定した場合は、そちらが優先されます。

【ドキュメントプロパティの設定方法】
 Excel97-2003:ファイル→プロパティ→タイトル
 Excel2007:Officeボタン→配布準備→プロパティ→タイトル
 また、ブックを閉じた状態での設定方法は次です。
 該当ブックを右クリック→プロパティ→詳細→タイトル

◆共有パソコンで、アドインを共有する
 アドインファイルは、先の説明の通り「C:\Users\ユーザー名\AppData\Roaming\Microsoft\AddIns」に保存されます(ExcelのバージョンやOSによって異なります)。この場合、該当のユーザーしかそのアドインを使用できません。

 1台のパソコンを複数人で共有していて、共有者全員がアドインを使用可能にするためには、アドインファイルを別の場所に移動する必要があります。
 その場所は、Microsoft Officeフォルダ内のLibraryフォルダになります(ここではオフィスのライブラリと呼びます)。アドインファイルをオフィスのライブラリに移すと、そのパソコンを使用する全ユーザーがそのアドインを使用できるようになります。
 尚、オフィスのライブラリのパスは通常「C:\Program Files\Microsoft Office\OFFICE11\Library」になります。
※このフォルダは管理者の権限でなければファイルのコピーや削除ができません。


◆アドインマネージャーの「参照」
 アドインマネージャーの「参照」を利用してもアドインを使用できるようになります。しかしその場合は、該当のファイルがアドインライブラリに移るわけではなく、そのファイルのパスが記録されるに留まります。従ってなんらかの理由でファイルを移動や削除した場合、ファイルを参照できず、アドインを使用できなくなります。長期間アドインを使用するような時には、お薦めの方法ではありません。

◆アドインマネージャーのアドイン名表示を消す
 アドインをアンインストールしても、アドインマネージャーのアドイン名は消えません。アドインマネージャーのアドイン名は、該当のアドインファイルを参照できない状態で、そのアドインを選択した時、削除することできます。

アドインライブラリのパスの取得

 ユーザーのアドインライブラリ、オフィスのライブラリのパスを取得するコードです。

Sub Addin_Library_Path()
    MsgBox Application.UserLibraryPath    'ユーザーのアドインライブラリ
    MsgBox Application.LibraryPath        'オフィスのライブラリ
End Sub

Excel Tips for Teachers

Copyright (C) 2009- 坂江 保 All Rights Reserved.