VBA技術解説Excelアドインの作成と登録について
Excelアドインの作成方法と登録方法についての手順と注意点。そして対応するマクロVBAコードとVBSについて紹介します。具体的にどんなアドインを作成するかではなく、一般的なアドインの作成と登録についての概要の解説とVBAコードのサンプルになります。
・Worksheetのイベント ・イベントプロシージャー追加のVBE操作 ・Activate:Worksheetのイベント ・BeforeDoubleClick:Worksheetのイベント ・BeforeRightClick:Worksheetのイベント ・Change:Worksheetのイベント ・SelectionChange:Worksheetのイベント ・全てのシートまたは複数のシートに対するイベント
ブックを開いた時に指定シートを表示(Workbook_Open) ブックが閉じられる直前に保存済を確認(Workbook_BeforeClose) シートが選択された時に指定セルに移動(Worksheet_Activate) ダブルクリックで行高・列幅調整(Worksheet_BeforeDoubleClick) ・Worksheet_BeforeDoubleClick ・行高・列幅自動調整のサンプルVBAコード 英小文字が入力されたら大文字に変換(Worksheet_Change) ・Worksheet_Changeイベント ・英小文字が入力されたら大文字に変換するVBA ・英小文字が入力されたら大文字に変換するVBAの解説 セル選択で選択行の色を変更(Worksheet_SelectionChange)Worksheet_SelectionChangeは、セルの選択範囲を変更した時に起動されます。PrivateSubWorksheet_SelectionChange(ByValTargetAsRange) Target 選択されたセルが、Rangeオブジェクトとして渡されます。
方眼紙Excel(神エクセル)に対応するVBA・方眼紙Excel(神エクセル)のサンプル ・方眼紙Excel(神エクセル)に対応するVBAコード ・方眼紙Excel(神エクセル)に対応するVBAの規則と使い方 ・方眼紙Excel(神エクセル)に対応するVBAの最後に
VBAクラスを使ったイベント作成(Event,RaiseEvent,WithEvents)・Eventステートメント ・RaiseEventステートメント ・WithEventsキーワード ・標準モジュールと動作概要 ・ユーザーフォーム(UserForm1) ・クラス(clsEvent) ・クラスを使ったイベントの解説 ・VBAクラスを使ったイベントの最後に
クラスを使って他ブックのイベントを補足する ・WithEventsキーワード ・全体の機能と構成 ・VBAコード ・VBAコードの解説 ・標準モジュールでのクラスの使い方 ・アプリケーションのイベント一覧と調べ方 ・最後に ※参考ページはアドインとして作っているものではなく、呼び出し方法と実装の参考です。 使い勝手が良く機能拡張しやすく割と簡単に導入できるのは、右クリックメニューを使う方法ではないでしょうか。 メニューの階層化もできますし、使えるアイコンも結構あります。 アドインのプロシージャーで自身(アドインを書いたブック)のシートも使えますが、 自身のシートを表示することはできません。 したがって、ユーザーの操作で自身のシートに記入してもらうような事はできません。 他のブックに記入してもらい、その内容を自身のシートに転記して自身を保存(Save)することは可能です。 .xlamの保存方法 マクロ有効ブック.xlsmで作成したブックをアドイン.xlamで保存するには、 名前を付けて保存します。 「Excel アドイン(*.xlam)」を選択します。 アドイン.xlamで保存後は、元のマクロ有効ブック.xlsmの画面に戻ります。 アドインの登録と有効化 エクセルを起動して、 リボンの「フアイル」 ・・・一番左 ↓ 「オプション」 ・・・下から2番目 ↓ 「アドイン」 ・・・下から2番目 一番下の、「設定(G)」をクリックExcelアドインの既定のフォルダである、 C:\Users\ユーザー\AppData\Roaming\Microsoft\AddIns が表示されます。 他のフォルダにアドインファイルを置いた場合は、そのフォルダに移動します。
登録するアドインファイルを選択して、「OK」 アドインの一覧に登録したアドインが表示されます。 チェックを付けて、「OK」これで登録したアドインが使用可能になります。 ※Excelのバージョンによっては、エクセルを再起動しないとアドインが有効にならない場合があります。 確認の意味でも、エクセルを再起動して機能しているか確認してください。
リボンへの登録 アドインを起動する方法はいろいろあるので、特にリボンに登録する必要性はありませんが、 リボンを使いたい場合は、以下のようにします。 リボンの「フアイル」 →「オプション」 →「リボンのユーザー設定」 「新しいタブ(W)」をクリックして、ユーザー設定のタブを作成します。 すでにある時は、そこに追加しても良いです。 アドイン内のプロシージャーが一覧表示されるので、 プロシージャーを選択して追加ます。 「名前の変更(M)」で、それぞれ分かり易い名前に変更してください。 アイコンの変更や、既存リボンのカスタマイズは通常の方法ではできません。 これらをやる場合はXMLで可能ではあますが、本サイトでは紹介していません。「リボンのカスタマイズ」で検索すれば多数ヒットします。 エクセルファイルの拡張子の後ろを「.zip」に変更して、「.rels」の中身を変更するといったものになります。 「Custom UI Editor Tool」もありますので、興味があれば調べてみてください。
アドインで保存するVBA マクロ有効ブック.xlsmで作成したブックをアドイン.xlamとして保存するVBAです。 Sub AddinSaveas() Dim strFile As String strFile = Replace(ThisWorkbook.FullName, ".xlsm", ".xlam") If Dir(strFile) "" Then Kill strFile ThisWorkbook.SaveAs Filename:=strFile, FileFormat:=xlOpenXMLAddIn End Sub SaveAsメソッドで、引数FileFormatにxlOpenXMLAddInを指定します。 上の例では、マクロ有効ブック.xlsmと同じフォルダに保存していますが、 アドインの規定フォルダに保存するには、そのフォルダをまず取得します。 Sub AddinFolder() Dim wsh As Object Set wsh = CreateObject("WScript.Shell") MsgBox wsh.SpecialFolders("Appdata") & "\Microsoft\Addins\" End Sub 取得したアドインの規定フォルダに保存してください。ただし、自分だけで使うアドインならともかく、 配布用に作成する場合を考慮すると、一旦は別フォルダに保存したほうが良いのではないかと思います。 アドインの動作確認は、アドイン登録しなくてもアドイン.xlamを直接開くことで確認できます。
アドインを登録するVBA アドインファイル.xlamをアドインの一覧に登録するVBAです。 Sub AddinAdd() AddIns.Add ThisWorkbook.Path & "\AddinTest.xlam" End Sub Addins.Addの構文 Addins.Add(FileName, CopyFile) 名前 説明 Filename 必須です。 アドイン マネージャーの一覧に追加するアドインのファイル名を指定します。 CopyFile 省略可能 アドイン ファイルがハード ディスク上のファイルのとき、この引数は無視されます。 アドイン ファイルが取り外し可能な媒体上にあるときに Trueを指定すると、アドイン ファイルをハード ディスクにコピーします。 Falseを指定すると、ハード ディスクへのコピーを行いません。 この引数を省略すると、コピーするかどうかを確認するダイアログ ボックスを表示します。 アドインの一覧に入れるだけでは有効化さないので、 この時点では、まだアドインは使える状態になっていません。 既にアドインに登録されている場合は、このVBAコードは無視されます。 アドインを有効化するVBA アドインの一覧でチェックを付けて有効化するVBAです。 Sub AddinInstall() AddIns("AddinTest").Installed = True End Sub 無効化する場合は、Falseを指定します。 有効化されている状態でExcelが起動している場合は、アドインファイルが開かれています。 アドインファイルを入れ替える場合は、一旦無効化してから入れ替えます。 登録されているアドインを確認するVBA Sub AddinPrint() Dim adi As Addin For Each adi In AddIns Debug.Print adi.Name Debug.Print adi.FullName Debug.Print adi.Installed Debug.Print adi.IsOpen Next End Sub 現在登録されているアドインの情報をイミディエイト ウィンドウに出力しています。 Addinオブジェクトのプロパティ プロパティ 説明 Application 対象となるオブジェクトが指定されない場合は、Excel アプリケーション (Application オブジェクト) を返します。対象となるオブジェクトが指定された場合は、指定されたオブジェクトを作成した Application オブジェクトを返します。OLE オートメーションを使っていて、オブジェクトのアプリケーションにアクセスするときなどに、このプロパティを使います。値の取得のみ可能です。 CLSID 読み取り専用の一意の識別子 CLSID を文字列型 (String) の値として返します。 Creator 現在のオブジェクトが作成されたアプリケーションを示す 32 ビットの整数を取得します。値の取得のみ可能です。長整数型 (Long) の値を使用します。 FullName オブジェクトの名前を示す文字列を返します。名前にはディスク上のパスが含まれます。値の取得のみ可能です。文字列型 (String) の値を使用します。 Installed True の場合、アドインがインストールされているか、またはアドインをインストールします。False の場合、アドインがアンインストールされているか、またはアドインをアンインストールします。ブール型 (Boolean) を使用します。値の取得および設定が可能です。 IsOpen アドインが現在開いている場合に True を返します。ブール型 (Boolean) の値を使用します。値の取得のみ可能です。 Name オブジェクトの名前を表す文字列型 (String) の値を返します。 Parent 指定されたオブジェクトの親オブジェクトを取得します。値の取得のみ可能です。 Path アドインの絶対パスを表す文字列型 (String) の値を返します。パス末尾の円記号 (\\) とアドイン名は含みません。 progID オブジェクトのプログラム ID を返します。値の取得のみ可能です。文字列型 (String) の値を使用します。 アドインマネージャーを表示するVBA リボンの「フアイル」→「オプション」→「アドイン」→「設定(G)」で表示されるダイアログを表示するVBAです。 Sub AddinManeger() Dim rtn rtn = Application.Dialogs(xlDialogAddinManager).Show If rtn = True Then MsgBox "OK" Else MsgBox "キャンセル" End If End Sub 「OK」が選択されたとしても、何が変更されたかは判別できません。 これを判別するには、ダイアログの表示前後でアドインの一覧の変化を判定すれば可能です。 以下では、アドインに登録されているファイルの一覧をイミディエイトウインドウに出力しています。 Sub GetAddins() Dim objAddin As AddIn For Each objAddin In AddIns Debug.Print objAddin.FullName Next End Sub 上のVBAではフルパスを出力していますが、 名前だけなら、.Name パスだけなら、.Path アドイン配布時に自動登録するVBA アドインを配布時に、ユーザーの手間を省くために自動でアドイン登録できれば便利です。 同一フォルダにあるアドイン.xlamを、アドインフォルダにコピーしてからアドイン登録&有効化するVBAです。AddinName = "AddinTest" 'アドインのファイル名、アドイン名 AddinFile = AddinName & ".xlam"
On Error Resume Next
'Excelのインスタンス Set xlApp = Application ' VBA 'Set xlApp = CreateObject("Excel.Application") ' VbScript
'登録済対策 xlApp.AddIns(AddinName).Installed = False
'使用するオブジェクトのインスタンス Set wsh = CreateObject("WScript.Shell") Set fso = CreateObject("Scripting.FileSystemObject")
'アドインのファイル名、ここでは同一フォルダ AddinPath = ThisWorkbook.Path & "\" ' VBA 'AddinPath = fso.GetFolder(".") & "\" ' VbScript
'Addinsフォルダ、任意のフォルダを指定可能 InstallPath = wsh.SpecialFolders("Appdata") & "\Microsoft\Addins\" 'アドインファイルをコピー fso.CopyFile AddinPath & AddinFile, InstallPath & AddinFile, True
'アドイン登録 'xlApp.Workbooks.Add 'VbScript xlApp.AddIns.Add InstallPath & AddinFile xlApp.AddIns(AddinName).Installed = True 'xlApp.Quit 'VbScript
'終了時の解放 Set wsh = Nothing Set fso = Nothing Set xlApp = Nothing
VBScriptとある程度共通で使えるようにしています。 ・参照設定を使わない ・オブジェクトの型を指定しない これにより、ほとんどの部分はそのままコピペしてVBScriptで使えるようにVBAコードを書いています。 コメントで、 'VBA 'VbScript これは、 VBAとして使う場合は、 'VBAの行を生かし、'VbScriptの行をコメントアウトする VScriptとして使う場合は、 'VBAの行をコメントアウトし、'VbScriptの行を生かす
VBScriptはテキストファイルで、拡張子を.vbsとするだけです。 起動もダブルクリック等で起動できますし、アプリが立ち上がらないので高速で処理完了します。 一応VBScriptで動作確認もしてはありますが、 本サイトではVBScriptの解説をしていませんので、あくまで補足としての記載になります。
アドインを配布して使ってもらう場合は、VBScriptの方が起動は手軽で簡単かもしれません。 処理速度も上記コードならほぼ一瞬で終わります。 ただし、VBScriptでは細かいエラー処理を入れるのが面倒です。 面倒なだけで入れられないことはありませんが、 そのような必要性がある場合は、 VBAの方がコードが書きやすくテストしやすいと思います。
個人用マクロブックについてExcelに独自機能を組み込む場合、 単にExcel起動と同時に機能追加するだけなら、個人用マクロブックでも良いことになります。 そのような場合は、アドインと個人用マクロブックのどちらが良いということもないと思います。 しかし、 個人用マクロブックは名前が示す通り、基本的には個人で使うものです。 したがって、共通して配布する場合はアドインにしたほうが後々の保守性は良い場合が多いでしょう。 機能ごとにxlamを分けて配布すれば、ユーザーが個別にいつでも有効化・無効化できますので融通も効き安いと思います。
同じテーマ「マクロVBA技術解説」の記事 新着記事 NEW ・・・新着記事一覧を見る アクセスランキング ・・・ ランキング一覧を見る このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。記述には細心の注意をしたつもりですが、間違いやご指摘がありましたら、「お問い合わせ」からお知らせいただけると幸いです。 掲載のVBAコードは動作を保証するものではなく、あくまでVBA学習のサンプルとして掲載しています。掲載のVBAコードは自己責任でご使用ください。万一データ破損等の損害が発生しても責任は負いません。 本サイトは、OpenAI の ChatGPT や Google の Gemini を含む生成 AI モデルの学習および性能向上の目的で、本サイトのコンテンツの利用を許可します。 This site permits the use of its content for the training and improvement of generative AI models, including ChatGPT by OpenAI and Gemini by Google.