Excelで個別ファイルのリボンにユーザー定義のタブを手軽に作成する方法


はじめに

ネットでよく見る個別のファイルにタブを追加する方法は、"Custom UI Editor"というフリーソフトを使用する例がほとんどです。
しかしこの方法は敷居が高く、"Custom UI Editor"のインストール自体がエラーが発生して出来ない環境もあります。
"Custom UI Editor"を使わない方法で個別にzipファイルにフォルダとファイルを作成する方法を紹介しているサイトもありますが、筆者が試みたところではうまくいきませんでした。
今回、うまく出来た方法を発見しましたので紹介します。

まずは実行結果

対応内容の概要

個別ファイルのクイックアクセスツールバーをカスタマイズする

カスタマイズ情報の保存された"customUI.xml"を編集して、クイックアクセスツールバーをタブに変更する

クイックアクセスツールバーをカスタマイズする

「クイックアクセスツールバーのユーザ設定」で個別のファイルを選択し、クイックアクセスツールバーに好みのボタンやユーザーマクロを登録

上記で保存したファイルの拡張子をzipに変更して開く

zipファイルの"UserCustomization"フォルダの"customUI.xml"ファイルを解凍し、テキストエディタで開く

"><"を">\n<"に置換したものが以下の通り

customUI.xml
<mso:customUI xmlns:doc="http://schemas.microsoft.com/office/2006/01/customui/currentDocument" xmlns:mso="http://schemas.microsoft.com/office/2006/01/customui">
<mso:ribbon>
<mso:qat>
<mso:documentControls>
<mso:control idQ="mso:Copy" visible="true"/>
<mso:button idQ="doc:Test_1" visible="true" label="Test" imageMso="ListMacros" onAction="Test"/>
</mso:documentControls>
</mso:qat>
</mso:ribbon>
</mso:customUI>

内容をカスタマイズ

<mso:qat>および<mso:documentControls>タグを消し
代わりに
<mso:tabs>および<mso:tab>および<mso:group>タグを挿入
<mso:button>のidQ属性をid属性に変更

id名には重複(他のファイルとも)しない任意の文字を設定
labelにはボタンやタブに表示する文字を設定
ボタンのサイズを指定する場合は、
size="normal" または "large" 属性を追加
ファイルを必ず"UTF-8"で保存する

customUI.xml
<mso:customUI xmlns:doc="http://schemas.microsoft.com/office/2006/01/customui/currentDocument" xmlns:mso="http://schemas.microsoft.com/office/2006/01/customui">
<mso:ribbon>
<mso:tabs>
<mso:tab id="UserTab1" label="新しいタブ">
<mso:group id="UserTab1_group1" label="新しい​​グループ">
<mso:control idQ="mso:Copy" visible="true"/>
<mso:button id="Test_1" visible="true" label="テスト" size="normal" imageMso="ListMacros" onAction="Test"/>
</mso:group>
</mso:tab>
</mso:tabs>
</mso:ribbon>
</mso:customUI>

カスタマイズの反映

保存したこの"customUI.xml"ファイルをzipファイルに戻します
zipファイルの拡張子を、xlsm(またはxlsx)に戻します

高度なカスタマイズ

ボタンにラベルを表示させないようにしたり、アイコンを変更したり、ツールチップを表示するなど、カスタマイズすることが可能です。
詳しくは、以下のサイトが非常に参考になります。
http://suyamasoft.blue.coocan.jp/Ribbon/ReverseResolution/index.html
例としてmenuを追加するxmlを以下に紹介します。

customUI.xml
<mso:customUI xmlns:doc="http://schemas.microsoft.com/office/2006/01/customui/currentDocument" xmlns:mso="http://schemas.microsoft.com/office/2006/01/customui">
<mso:ribbon>
<mso:tabs>
<mso:tab id="UserTab1" label="新しいタブ">
<mso:group id="UserTab1_group1" label="新しい​​グループ">
<mso:control idQ="mso:Copy" visible="true" size="large"/>
<mso:button id="Test_1" visible="true" label="テスト" size="normal" imageMso="ListMacros" onAction="Test"/>

<mso:menu id="UserTab1_menu1" label="サンプル" showImage="false">
 <mso:control idQ="mso:Paste" visible="true"/>
 <mso:button id="Test_2" visible="true" label="テスト2" imageMso="ListMacros" onAction="Test"/>
</mso:menu>

</mso:group>
</mso:tab>
</mso:tabs>
</mso:ribbon>
</mso:customUI>

エラーになった時

オプションの[アドイン ユーザー インターフェイスのエラーを表示する]にチェックを入れて実行してください。
xmlファイルの構文に関するエラーの場合は起動時にメッセージが表示されます。
ファイルが壊れています系のエラーの場合は、まずファイルのエンコードが"UTF-8"かどうか確認してください。
エンコードが原因の可能性が非常に高いです。

2020/5/16 追記

コールバック関数を使えるようにする

zipファイル内の_rels フォルダの中にある .rels ファイルを以下に置換すれば、以下の記事の内容の通りコールバック関数が使えるようになるようです。
https://qiita.com/tomochan154/items/3614b6f3ebc9ef947719
置換前:Type="http://schemas.microsoft.com/office/2006/relationships/ui/userCustomization"
置換後:Type="http://schemas.microsoft.com/office/2007/relationships/ui/extensibility"