Excelアドインの作成と登録について
Excelアドインの作成方法と登録方法についての手順と注意点。
そして対応するマクロVBAコードとVBSについて紹介します。
一般的なアドインの作成と登録についての概要の解説とVBAコードのサンプルになります。
アドインファイルのフォルダ
アドインの作り方
アドインの登録と有効化
リボンへの登録
アドインで保存するVBA
アドインを登録するVBA
アドインを有効化するVBA
登録されているアドインを確認するVBA
アドインマネージャーを表示するVBA
アドイン配布時に自動登録するVBA
個人用マクロブックについて
Excelアドインについて
エクセルに独自の機能追加するものがエクセルアドインになります。
このアドインファイルをエクセルに登録することでアドインの機能が使えるようになります。
アドインファイルのフォルダ
C:\Users\ユーザー\AppData\Roaming\Microsoft\AddIns
こちらになります。
Excelからアクセス可能なフォルダであれば、どこに置いても登録可能です。
アドインの作り方
プロシージャーでのVBAの記述について
アドインとして呼び出すプロシージャーは、外部で使える必要がありますので、
Sub
Public Sub
Function
Public Function
このように、スコープがPublicになるようにします。
・リボンのアイコンをクリック
・ユーザー定義関数
メニューの階層化もできますし、使えるアイコンも結構あります。
自身のシートを表示することはできません。
他のブックに記入してもらい、その内容を自身のシートに転記して自身を保存(Save)することは可能です。
.xlamの保存方法
名前を付けて保存します。
アドイン.xlamで保存後は、元のマクロ有効ブック.xlsmの画面に戻ります。
アドインの登録と有効化
リボンの「フアイル」 ・・・一番左
↓
「オプション」 ・・・下から2番目
↓
「アドイン」 ・・・下から2番目
C:\Users\ユーザー\AppData\Roaming\Microsoft\AddIns
が表示されます。
他のフォルダにアドインファイルを置いた場合は、そのフォルダに移動します。
チェックを付けて、「OK」
※Excelのバージョンによっては、エクセルを再起動しないとアドインが有効にならない場合があります。
確認の意味でも、エクセルを再起動して機能しているか確認してください。
リボンへの登録
リボンを使いたい場合は、以下のようにします。
すでにある時は、そこに追加しても良いです。
プロシージャーを選択して追加ます。
これらをやる場合はXMLで可能ではあますが、本サイトでは紹介していません。
エクセルファイルの拡張子の後ろを「.zip」に変更して、「.rels」の中身を変更するといったものになります。
「Custom UI Editor Tool」もありますので、興味があれば調べてみてください。
アドインで保存する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を指定します。
アドインの規定フォルダに保存するには、そのフォルダをまず取得します。
Sub AddinFolder()
Dim wsh As Object
Set wsh = CreateObject("WScript.Shell")
MsgBox wsh.SpecialFolders("Appdata") & "\Microsoft\Addins\"
End Sub
取得したアドインの規定フォルダに保存してください。
配布用に作成する場合を考慮すると、一旦は別フォルダに保存したほうが良いのではないかと思います。
アドインの動作確認は、アドイン登録しなくてもアドイン.xlamを直接開くことで確認できます。
アドインを登録するVBA
Sub AddinAdd()
AddIns.Add ThisWorkbook.Path & "\AddinTest.xlam"
End Sub
Addins.Addの構文
名前 | 説明 |
Filename | 必須です。 アドイン マネージャーの一覧に追加するアドインのファイル名を指定します。 |
CopyFile | 省略可能 アドイン ファイルがハード ディスク上のファイルのとき、この引数は無視されます。 アドイン ファイルが取り外し可能な媒体上にあるときに Trueを指定すると、アドイン ファイルをハード ディスクにコピーします。 Falseを指定すると、ハード ディスクへのコピーを行いません。 この引数を省略すると、コピーするかどうかを確認するダイアログ ボックスを表示します。 |
この時点では、まだアドインは使える状態になっていません。
アドインを有効化するVBA
Sub AddinInstall()
AddIns("AddinTest").Installed = True
End Sub
無効化する場合は、Falseを指定します。
アドインファイルを入れ替える場合は、一旦無効化してから入れ替えます。
登録されているアドインを確認する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
現在登録されているアドインの情報をイミディエイト ウィンドウに出力しています。
プロパティ | 説明 |
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
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です。
Sub AdinAutoInstall()
Dim InstallPath
Dim AddinPath
Dim AddinFile
Dim AddinName
Dim xlApp
Dim fso
Dim wsh
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
MsgBox "インストール終了"
End Sub
VBScriptとある程度共通で使えるようにしています。
・参照設定を使わない
・オブジェクトの型を指定しない
これにより、ほとんどの部分はそのままコピペしてVBScriptで使えるようにVBAコードを書いています。
コメントで、
'VBA
'VbScript
これは、
VBAとして使う場合は、 'VBAの行を生かし、'VbScriptの行をコメントアウトする
VScriptとして使う場合は、 'VBAの行をコメントアウトし、'VbScriptの行を生かす
起動もダブルクリック等で起動できますし、アプリが立ち上がらないので高速で処理完了します。
一応VBScriptで動作確認もしてはありますが、
本サイトではVBScriptの解説をしていませんので、あくまで補足としての記載になります。
処理速度も上記コードならほぼ一瞬で終わります。
ただし、VBScriptでは細かいエラー処理を入れるのが面倒です。
面倒なだけで入れられないことはありませんが、
そのような必要性がある場合は、
VBAの方がコードが書きやすくテストしやすいと思います。
個人用マクロブックについて
単にExcel起動と同時に機能追加するだけなら、個人用マクロブックでも良いことになります。
そのような場合は、アドインと個人用マクロブックのどちらが良いということもないと思います。
しかし、
個人用マクロブックは名前が示す通り、基本的には個人で使うものです。
したがって、共通して配布する場合はアドインにしたほうが後々の保守性は良い場合が多いでしょう。
機能ごとにxlamを分けて配布すれば、ユーザーが個別にいつでも有効化・無効化できますので融通も効き安いと思います。
同じテーマ「マクロVBA技術解説」の記事
条件付きコンパイル(32ビット64ビットの互換性)
ドキュメントプロパティ(BuiltinDocumentProperties,CustomDocumentProperties)
VBAでファイルを既定のアプリで開く方法
Excelアドインの作成と登録について
VBAでのタイマー処理(SetTimer,OnTime)
マクロでShift_JIS文字コードか判定する
Byte配列と文字コード関数について
Applicationを省略できるApplicationのメソッド・プロパティ一覧
PowerQueryの強力な機能をVBAから利用する方法
ShapesとDrawingObjectsの相違点と使い方
新規挿入可能なシート名の判定
新着記事NEW ・・・新着記事一覧を見る
TRIMRANGE関数(セル範囲をトリム:端の空白セルを除外)|エクセル入門(2024-08-30)
正規表現関数(REGEXTEST,REGEXREPLACE,REGEXEXTRACT)|エクセル入門(2024-07-02)
エクセルが起動しない、Excelが立ち上がらない|エクセル雑感(2024-04-11)
ブール型(Boolean)のis変数・フラグについて|VBA技術解説(2024-04-05)
テキストの内容によって図形を削除する|VBA技術解説(2024-04-02)
ExcelマクロVBA入門目次|エクセルの神髄(2024-03-20)
VBA10大躓きポイント(初心者が躓きやすいポイント)|VBA技術解説(2024-03-05)
テンキーのスクリーンキーボード作成|ユーザーフォーム入門(2024-02-26)
無効な前方参照か、コンパイルされていない種類への参照です。|エクセル雑感(2024-02-17)
初級脱出10問パック|VBA練習問題(2024-01-24)
アクセスランキング ・・・ ランキング一覧を見る
1.最終行の取得(End,Rows.Count)|VBA入門
2.繰り返し処理(For Next)|VBA入門
3.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門
4.変数宣言のDimとデータ型|VBA入門
5.RangeとCellsの使い方|VBA入門
6.ブックを閉じる・保存(Close,Save,SaveAs)|VBA入門
7.セルのクリア(Clear,ClearContents)|VBA入門
8.メッセージボックス(MsgBox関数)|VBA入門
9.条件分岐(Select Case)|VBA入門
10.ブック・シートの選択(Select,Activate)|VBA入門
- ホーム
- マクロVBA応用編
- マクロVBA技術解説
- Excelアドインの作成と登録について
このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。
記述には細心の注意をしたつもりですが、
間違いやご指摘がありましたら、「お問い合わせ」からお知らせいただけると幸いです。
掲載のVBAコードは動作を保証するものではなく、あくまでVBA学習のサンプルとして掲載しています。
掲載のVBAコードは自己責任でご使用ください。万一データ破損等の損害が発生しても責任は負いません。