LoginSignup
11
14

【Excel VBA】リボンの自作タブをアドインファイル(xlam)に埋め込む

Posted at

概要

Microsoft Officeの各ソフトにはリボンというツールバーがあります.これに自作のタブを追加したりマクロを登録したりするとき,個人であれば設定から1つずつ追加すればよいです.
しかし,常に表示される必要はない機能も多くあり「必要なときに1クリックでタブを追加してほしい」というときもあります.
Excelのリボン例

この記事では「"アドイン名.xlam"を開いたときにリボンにタブを追加する方法」を説明します.

バージョン

動作確認した環境は以下の通りです.

  • OS
    • Windows 11 Home
    • バージョン 23H2
  • Excel
    • Microsoft 365
    • バージョン 2402 ビルド 16.0.17328.20124 (64 ビット)

初期設定手順

以下のような流れで行います.

  1. 事前準備(開発タブの表示)
  2. アドインファイル(アドイン名.xlam)を用意
  3. アドインを"開く"
  4. 内部ファイルを書き換え
  5. アドインを"閉じる"
  6. 起動テスト

事前準備(開発タブの表示)

すでに開発タブを表示している方は次へ進んでください.

これはExcelのオプションから「リボンのユーザー設定」にある「開発」にチェックを入れるだけでよいです.
開発タブの表示

アドインファイル(アドイン名.xlam)を用意

Excelのアドインファイルを用意しましょう.
新しく空白のブックを開きます.

既存のブックも使えますがシートが見えなくなります

新しくブックを作成する場合

VBE 起動

開発タブから「Visual Basic」をクリックしてVBEを開きます.
VisualBasicボタンの位置
こんなのが出てくるはずです↓
VBE起動後

もし左の「プロジェクト」や「プロパティ」などが見つからない場合は上のメニューの 「表示」>「プロジェクトエクスプローラー」「表示」>「プロパティウィンドウ」 から表示させることが出来ます.

ThisWorkbookのIsAddinをTrueに変更

VBEを開いたら,「プロジェクト - VBEProject」から「ThisWorkbook」を見つけてクリック,プロパティを表示し,そこから「IsAddin」という設定を探して(はじめはFalseになっているはずなので)Trueに変更します(図では縦長にならないように横に並べています).
IsAddinをTrueに変更する

「VBAProject (Book 1)しか見えない」という場合は,アイコンの左にある ちっちゃいプラスマーク($+$)から下位のファイルを見ることが出来ます

うまくいっていれば,IsAddinをTrueにすると後ろにあるExcelのシートが見えなくなります.

ブックをアドインとして保存

それができたらVBE側で「ファイル」>「????の上書き保存」で保存します.

新しくブックを作成した場合は保存場所がないのでこのタイミングで保存場所を確認させられます.好きな場所に好きな名前で保存してよいです.保存場所はあまり関係ありませんが クラウドへの保存はお勧めしません 1

保存するとき,ファイルの種類を「Excelアドイン (.xlam)」に必ず変えてください.
ファイルの種類をXLAMに変更

Excelの仕様上,ファイルの種類を変更すると保存先が
C:\Users\****\AppData\Roaming\Microsoft\AddIns
のような場所に移動してしまいます.
面倒ですが 好きな場所まで移動して保存するようにしましょう.


既存のブックで作業していた場合

ブックを開いた状態で,「名前を付けて保存」を選択し,ファイルの種類を「Excelアドイン (.xlam)」にして保存するだけでよいです.

1つ前のノートの通り,ファイルの種類を変えるとフォルダが移動するので注意してください.


ここまででうまくできているか確認

アドインファイルを用意出来たら動作確認のため,一度ブックを閉じ,再度開きます.

既に名前を付けて保存していても「変更内容を保存しますか?」と確認されることがありますが,気にせず(保存せず)閉じて問題ありません.

アドインを開いたときにセキュリティに関する警告が出ることがありますが,自分で作ったものなので(このページで書いていないようなよほどの変なことをしていなければ)「マクロを有効にする」を押して問題ありません.
セキュリティ通知の例

シートが表示されず,Excelのウィンドウが開いたらここまでは問題ありません.

ここからファイル自体を変更するのでいちどウィンドウは閉じておきましょう.

アドインを"開く"

ここからリボンの準備を行います.

ファイル名の変更

用意したアドインファイル(Book1.xlam とします)の拡張子を(警告は無視して)zipに変更します.
こんな感じ→ 名前を変更したBook1.xlam

もし,拡張子が表示されていない場合にはエクスプローラーの「表示」>「ファイル名拡張子」などから拡張子を表示させてください.

ZIPファイルの展開

Book1.zipを適当な場所に展開(解凍)しておきましょう.
中身にはフォルダ3つとファイル1つが入っています.

Book1.zipの中身
(↑展開されてできたBook1フォルダの中身)

内部ファイルを書き換え

具体的に書き換える必要があるのは2か所です.

  • _rels内の.rels
  • アドイン用フォルダmyaddin内のcustomUI.xml(←フォルダもファイルも新しく作る)

このうち,.relsはアドインを初めて用意するときだけ書き換える必要があるものです.
また,アドインフォルダ名myaddinはある程度自由に決定できます(mysoshakeabcdefgなど).
(既存のフォルダと同じ名前だとその中にcustomUI.xmlを作ることになるのでやめたほうがいいです)

.relsの書き換え

.relsファイルは右クリックしてメモ帳で開きましょう.
最初に開くと改行が入っておらず読みにくいですが,下のような内容だと思います.

.rels
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships">
<Relationship Id="rId3" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/extended-properties" Target="docProps/app.xml"/>
<Relationship Id="rId2" Type="http://schemas.openxmlformats.org/package/2006/relationships/metadata/core-properties" Target="docProps/core.xml"/>
<Relationship Id="rId1" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument" Target="xl/workbook.xml"/>
</Relationships>

一番下の</Relationships>の真上の行に以下のコードを追加します.

<Relationship
    Id="rIdMysoShake" 
    Type="http://schemas.microsoft.com/office/2006/relationships/ui/extensibility" 
    Target="/mysoshake/customUI.xml" 
/>

Idは英数字なら自由に決めて問題ありませんが,1文字目が数字だとうまく動かないかもしれません

Targetのフォルダ名(上ではmysoshake)は後で作るフォルダ名と同じでないといけません.覚えておきましょう.

↓こんな感じになります(改行の代わりにスペースを入れても動作します2).

.rels
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships">
<Relationship Id="rId3" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/extended-properties" Target="docProps/app.xml"/>
<Relationship Id="rId2" Type="http://schemas.openxmlformats.org/package/2006/relationships/metadata/core-properties" Target="docProps/core.xml"/>
<Relationship Id="rId1" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument" Target="xl/workbook.xml"/>
<Relationship Id="rIdMysoShake" Type="http://schemas.microsoft.com/office/2006/relationships/ui/extensibility" Target="/mysoshake/customUI.xml" />
</Relationships>

customUI.xml の作成

まずはBook1フォルダに戻り,そこに新しく(先ほど決めた名前の)フォルダを作ります.
カスタムUI用のフォルダ作成

そのなかに,新しくテキストファイルを作り,名前と拡張子を変更してcustomUI.xmlとします.
新しい テキストドキュメント.txtを作成 → customUI.xmlに変更
これもまたメモ帳で開きそのなかにリボンの設定を書いていけばよいです.

ホームタブを消すcustomUI.xml

ここでは試しに「ホーム」タブを非表示にするように設定します.

customUI.xml
<?xml version="1.0" encoding="utf-8"?>
<customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui">
<ribbon>
<tabs>
	<tab idMso="TabHome" visible="false" />
</tabs>
</ribbon>
</customUI>

入力が出来たら.relscustomUI.xmlは保存して閉じておきます.

アドインを"閉じる"

ここからファイルたちをxlamファイルに戻します.

ファイルたちを圧縮してzipファイルにする

Book1フォルダのすべてのファイルを選んで圧縮しましょう.
ファイルを圧縮
(ZIPファイルはデスクトップに出来ることがあります)

圧縮するとき, Book1フォルダを圧縮するとうまく動作しません
かならず複数選択した状態で圧縮するようにしてください.

アドインファイルに変換する

圧縮が出来たら,拡張子をxlamに戻します.
ZIPになったファイルたち → アドインファイルに変換した後

起動テスト

ここまでうまくできていれば,起動した際に「ホーム」タブが消えるはずです.
セキュリティ通知があるときはホームタブはある
↓マクロを有効にするとタブがなくなります
ホームが消えた

すべての Excelファイルを閉じてから開きなおせばタブは元に戻ります.

本題

ここから,リボンにタブを追加してボタンやチェックボックスを追加してVBAマクロと連携します.

customUI.xmlで独自のタブを追加する

次のような記述で何もないタブを追加できます.

<customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui">
<ribbon>
<tabs>
	<tab id="TabMysoShake" label="独自に作られたタブ">
	</tab>
</tabs>
</ribbon>
</customUI>

入力が終わったら保存して閉じ,先ほどのように圧縮してアドインファイルに変換しましょう.
起動してみるとしたの用にタブが追加されます.
空のタブ追加

タブのidは(もともとあるタブや自分が追加したタブなど)他のタブと被るとうまく動作しません.ユニークな名前にしておきましょう.

タブは何も指定しない場合は一番後ろに追加されます.例えば「ホームの後ろに独自タブを配置したい」というときは

<tab id="TabMysoShake" label="独自に作られたタブ" insertAfterMso="TabHome">

というようにinsertAfterMso="タブ名"と書けばよいです.

既存のタブの名前は公式のドキュメント (直接リンク)にあります.

上のノートで紹介しているドキュメントを見ればボタンの追加方法やマクロとの連携方法がすべて書いてあります.
いくつかの例を紹介しておきます.

タブにボタンを追加する

何の機能もないボタンを追加してみましょう.

customUI.xml
<customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui">
<ribbon>
<tabs>
	<tab id="TabMysoShake" label="独自に作られたタブ" insertAfterMso="TabHome">
	<button id="mysoButton" label="独自のボタン"/>
	</tab>
</tabs>
</ribbon>
</customUI>

タブにグループが作られ,そこにボタンが配置されます.
無機能のボタンを追加

ボタンなどのリボンに配置されるものは,何かのグループに分類しなければなりません(見た目が崩れないように).そのため,<tab></tab>の中に直接ボタンを追加しようとしてもエラーとなり, アドインファイルに変換してもタブが追加されず,何も起こりませんcustomUIではミスがあっても警告などは出ないので覚えて起きましょう

ボタンにマクロを結びつける

今はボタンをクリックしても何も起きません.
そのため,customUI.xml内でどのマクロを呼ぶのかを指定しなければなりません.
まずは呼び出されるマクロを作りましょう.

OnActionを作る

「開発」>「VisualBasic」 を開いて,新しい「標準モジュール」を作りましょう.
標準モジュール

カスタムUIから呼ばれる場合,プロシージャは次の形式で書きます.

好きなモジュール
Public Sub MysoOnAction(control As IRibbonControl) 
    '何かの処理 ↓例えば
    If control.Id = "mysoButton" Then
        Call MsgBox("mysoButtonが押されました")
    End If
End Sub

このようにしてVBEを上書き保存します.
打ち込んだ例

値が入るテキストボックスやチェックボックス,またはコールバック(マクロ側でcustomUIの中身を変化させる方法)を使うときは引数が増えることはありますが,通常は1つだけ引数をとります.

ここで,上書き保存が終了したらExcelを終了し,再び「zipに変換→展開」という作業を行いましょう.

これをしないで先ほどのファイルを書き換えていると今作ったVBAのソースも消えてしまいます.

customUI.xmlでOnActionを呼ぶように設定する

次にcustomUI.xml側の設定です.ボタンの部分にOnActionの設定が増えています.

customUI.xml
<customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui">
<ribbon>
<tabs>
	<tab id="TabMysoShake" label="独自に作られたタブ" insertAfterMso="TabHome">
		<group id="mysoGroup" label="独自グループ"> 
			<button id="mysoButton" label="独自のボタン" onAction="MysoOnAction"/>
		</group> 
	</tab>
</tabs>
</ribbon>
</customUI>

動作チェック

これで再度アドインファイルに変換して起動.動作チェックをすると次のようになります.
ボタンを押した動作

まとめ

以上のようにしていくことで次々とマクロを登録できます.
コールバックやそのほかの機能(msoImageやkeytipなど)も使いこなせるととても便利になるようですのでぜひ活用していきましょう.

参考になるサイト

  1. [MS-CUSTOMUI]: Custom UI XML Markup Specification
  2. 3.4.1.3 CustomUI Part
  3. IRibbonControl オブジェクト (Office)
  4. Excel のリボンUIを業務アプリとして使う
  5. Excel VBA 第2回 リボンとアドイン作成
  1. OneDriveやGoogleDriveなど,クラウドのフォルダだとうまく動作しないことがあります.そのため,アドインファイルはローカルのフォルダ(Cドライブなど)に保存することをお勧めします.

  2. スペースも改行も区切り文字として処理されるからだと思いますが筆者は理解できていません. XML講座ではないのでゆるしてください.

11
14
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
11
14