● Excel2010のリボンに、Excel2000と同じプログラムコードのコピペでユーザー設定ボタンを生成する。(一応ツールバー単位で)

※まだ書きかけです。すみません。
※間違ってたらすみません。
※メモ書きなので、自分でも意味不明な箇所も多いです。ごめんなさい。

※32bitの2010までの話です。2013、2016はテストしてません。(できるかもしれませんけど)

※下図のようにボタンアイコンの絵には、オリジナルの絵を、イミディエイトで1行コードで設定(コピペ処理)することも可能です。

  
  
目次
 ★ はじめに
 ★ 使い道
 ★ PERSONAL.XLS(xlsb)を配置する場所
 ★ リボンの中に自動生成される単位
 ★ ツールバーの削除の方法
 ★ ボタンの増やし方の方法
 ★ ボタンのアイコンの絵の変更方法
 ★ ボタンのアイコンの絵を自作のビットマップの絵に変更する方法
 ★ テストコード01
 ★ テストコード02 少し作り変え
 ★ Wordの場合との違いについて
 ★ 補足~さらなる応用
 ★ 操作したいツールバーの削除やボタンなどについて調査、ボタンアイコンの絵の変更などのコード
※Shift+TABキー、もしくは、Homeキー、Homeキー+TAB数回、を押すと、目次付近に戻れます。
  
  
※こちらは「パート01」です。「パート02」は→こちら。
パート02も結構重要なことが書いてありますのでそちらもご覧になってみてください。

  
  

★ はじめに

例えば次のようなことをして、Excelでの作業の効率化を図ることができます。

(01)コピー、貼り付け、などのよく使うボタンをリボンの「アドイン」タブに自動生成
(「アドイン」タブは勝手に生成されるので「アドイン」タブ用のプログラムコードは不要です。)
(02)VBAプログラムコード(プロシージャ)をコマンドボタン化して、リボンの「アドイン」タブに自動生成(特にPERSONAL.XLSの内容を)

具体的には次のようなことができます。

リボンに「アドイン」タブと「ツールバー01」というツールバーを自動生成されるようにします。また、各ボタンは通常のコマンドやVBAプログラムと紐付けされていて、
・コピー、
・値の貼り付け、
・選択範囲を「hh:mm:ss」形式のセル書式にする、
・選択範囲を「yyyy/mm/dd」形式にする、
といったことなどができます。
(※「アドイン」タブは、2010などの場合はツールバーをVBAで追加すると、勝手に作られるので、「アドイン」タブを作るプログラムは要りません。郵便番号変換ウィザードをインストールしてある場合も勝手に「アドイン」タブができていると思いますが、その場合はそこにツールバーの内容が組み込まれていきます。2003以前の場合はツールバーだけが普通に追加されて表示されます。)

クイックアクセスツールバーとほとんど同じ感じになりますが、メニューボタンとVBAプログラムを紐付けすることにより、細かい制御ができるボタンを、クイックツールバーよりもかなり多く作れます。また、ボタンと名前(ボタンの文言)の両方を表示することができ、少し見やすくなります。
クイックツールバーもすごく便利なのですが、デフォルトの機能ではアイコン絵が変えられないのとボタンの文言が設定できないのでボタンが増えたときに分かりにくくなってしまいます。

なので、クイックアクセスツールバーの代わりに、2003スタイルのツールバーで代用します。2010でも2003用のツールバー作成プログラムが動きますし(自動的に「アドイン」タブができてその中に作成されます)、XMLを使わずに済むのでラクと言えば楽かもしれません。XMLのエディタやらなんやらを使うよりは、バージョン2000から共通のやり方でVBAでやってしまうほうが面倒は無いと言えば無いかもしれません。好みの問題化とは思いますが・・・。
リボンのタブを切り替えるのも面倒な、本当によく使う操作はクイックアクセスツールバーで、その他のよく使う機能は、「アドイン」タブにVBAでボタン化する、という2本柱で行くのも良いと思います。

ボタンを押したときに動かすプログラム(プロシージャ)は、
C:\Users\ユーザー名\AppData\Roaming\Microsoft\Excel\XLSTART というフォルダの中に、
「PERSONAL.XLS」というファイルを作って、その中に書きます。

そして、そのプログラム(プロシージャ)とメニューボタンを、これまたVBAプログラミングで自動紐付けさせます。

今回ここでしている作業はそういった自動作業となります。
  
  
★ 使い道

例えば「マクロの記録」で作ったマクロを、「アドインタブに2003のコードでボタン追加」したりクイックツールバーに登録すると、「リボン系のアドイン」と違って起動時に読み込む必要がないので、Excelの起動が遅くなったりするようなことがなく、便利です。
以下のような使い道があると思います。

(01)「マクロの記録」で自動的に作ったマクロを登録する。
特に、セルの値などをいじらないような処理、たとえば、以下のような処理を自動化したいときにとても便利です。
・度重なるレイアウト変更(頻度が多い定型的なレイアウト変更)
・同様のセル書式設定
・同様のウィンドウの固定場所の変更や子ウィンドウの分割その他
・同様の「いつも決まったオートシェイプの作成や境界線の変更、フォント設定の変更」など
・逆に、頻度が少なすぎて処理内容を忘れてしまいがちな上記のようなセルの値の編集をしないような処理
・マイクロソフトのOfficeは「リボン」になったせいで、2クリックも3クリックも操作が増えて操作が遅くならざるをえなくなってしまったので、例えば通常メニューのダイアログをリボン経由でワンクリックで出したい、などのとき。

※ボタンとしての登録が、自分では難しかったら、以下の記事を誰か分かる人に読んでもらってやってもらってください。
『「マクロ」のリボンへのメニューボタン化・関連の記事5つ』→12345
用語:ExcelやWordにおける「マクロ」とは?VBAと何が違う?(「ExcelやWord自身」は「マクロ」をどう判別・区別しているか?)Accessの場合は?

※マクロの自動記録とはすごく相性がいいので、ぜひ、併用してコスパアップに貢献してほしいです。必ずしも汎用的なマクロではなくても、部分的に自動化されるだけでも十分にコスパアップに貢献できると思います。
VBAがわからなくても自動化できるんですから。
もしマクロの記録でなんともならなかったら、「UWSC」も併用すると便利です。
UWSCについてはこちらと、こちらをご参照ください。
UWSCの自動実行ファイルも、本記事の「アドインタブの自作メニュー・ボタン」から呼び出すことが可能です。

(02)「マクロの記録」で作ったマクロを、一部、汎用的に作り替えたものを登録する
・ピボットをワンクリック一発で出して設定もしてしまう(「ソースとなる表の行と列の可変化」や「ピボット自体の毎度行うオプション設定」など)

(03)リボンの編集だとXMLを覚えるのがめんどくさい。アドインタブへのツールバー登録なら、2003のコマンドバー(ツールバー)操作関連のコードがそのまま使える

(04)自分で作ったビットマップのアイコンを、ボタンのアイコンとしてちゃちゃちゃっと使いたい

  
  
★ PERSONAL.XLS(xlsb)を配置する場所
C:\Users\ユーザー名\AppData\Roaming\Microsoft\Excel\XLSTART

※「PERSONAL.XLS」の作り方
2010の場合、xlsb拡張子ですでに「PERSONAL.XLS」ではなくて「PERSONAL.XLSB」ができている場合もあります。その場合はこれ以降の処置は必要ありません。「PERSONAL.XLSB」は、「開発」→「マクロの記録」→マクロの保存先で「個人用マクロブック」となっている状態で「OK」することで自動作成されます。「C:\Users\ユーザー名\AppData\Roaming\Microsoft\Excel\XLSTART」を開いて、「PERSONAL.XLSB」ができていたら、新たにxlsを作る必要はありません。

xlsでやりたいときは次のようにします。(すでにある「PERSONAL.XLS」を使いたいときも途中から同じです。)
最初、xlsx拡張子として画面が開きますので、先に、マイドキュメントなどに空のxlsファイルを別名保存します。ファイル→名前を付けて保存→ファイルの種類のドロップダウンメニューを「Excel97-2003ブック(xls)」に変更→PERSONAL.XLSという名前で「OK」します。(Excel2010でも「PERSONAL.XLS」という名前でOKです。拡張子はxlsmではなくて「xls」です。)
空のxlsファイルができたら「C:\Users\ユーザー名\AppData\Roaming\Microsoft\Excel\XLSTART」というフォルダに、そのファイルを移動します。

なお、2007以降?の場合は、「xlsb」拡張子ほうのが本当みたいです。自動的に個人用マクロブックとして生成されるのが普通です。でもxls拡張子でも動きます。もしxlsで不具合が出るなら前述の容量で今度は空のxlsbファイルを作って、それにプログラムをインポートすればOKかと思います。(インポートできるのかな?できなかったら単純にモジュールごとにxlsからコピペでOKです。)

移動完了したら、いったんそのファイルを開いて「非表示」の設定にして上書き保存して閉じます。
「非表示」にしないと普通のExcelファイルを開いたときに「PERSONAL.XLS」もいっしょに画面に表示されてしまうためです。これで共用部品化設定が完了です。

非表示設定のしかたは以下のとおりです。
2007以降の場合は「表示」タブ→「ウィンドウ」グループ→「表示しない」でいいようです。
「表示しない」が無いように見えたら、アイコンだけ出ている状態かもしれません。画面を最大化するか横方向に目いっぱい広げるとアイコンと文言の両方が見えると思います。
2003以前の場合は、ウィンドウ→「表示しない」でOKです。

  
  
★ リボンの中に自動生成される単位
ツールバー単位(ツールバーの名前単位)
  
  
★ ツールバーの削除の方法
Excel2010の場合ですと、ツールバーのどのボタンの上でもいいので右クリックして「ユーザー設定のツールバーの削除」でOKです。

「アドイン」タブの中に単一のツールバーしかない場合、それを削除すると、同時に「アドイン」タブも消えます。

複数のツールバーが生成されていた場合、最後のツールバーが削除されると「アドイン」タブも消えます。

再度、プログラムでツールバーを自動生成すると、同名のツールバーが生成されます。
(本サンプルでは「ツールーバー01」ツールバー。)

※2019/02/09追記
おわりのほうの「★ 操作したいツールバーの削除やボタンなどについて調査、ボタンアイコンの絵の変更などのコード」を使ってもらってもOKです。
  
  
★ ボタンの増やし方の方法

新しくボタンを追加したい場合は、そのようにプログラム内容を追記します。
そして、いったん、既存のすべてのツールバーを削除してから、再度、同じ名前でツールバーを登録します。

下記サンプルだと、「CmdBarCelHennsyuuChkAndAdd01()」に5つめ、6つめ、とボタンの登録のプログラムを追加し、そして、既存のツールバーを削除してから、「CmdBarCelHennsyuuChkAndAdd01()」を実行します。

※2019/02/09追記
おわりのほうの「★ 操作したいツールバーの削除やボタンなどについて調査、ボタンアイコンの絵の変更などのコード」を使ってもらってもOKです。
また、追加時に、「myBar.Controls(8).FaceId = 4 」みたいなコードを足していただくと、ボタンのアイコンの絵を変更することができます。「4」は絵の番号でこの例ではプリンタの絵です。
ボタンの絵の番号についてはこちらのWebページをご参考にしてください。
  
  
★ ボタンのアイコンの絵の変更方法

※2019/02/09追記
ボタンのアイコンの絵の変更をしたい場合は、おわりのほうの「★ 操作したいツールバーの削除やボタンなどについて調査、ボタンアイコンの絵の変更などのコード」の、「CmdBtnOnlyIcnChange01()」プロシージャなどを使ってもらうと変えることができます。

イミディエイトウィンドウで
Commandbars("ツールバー名").Controls(変えたいボタンの番号).FaceID = 変えたい絵の番号
とやってもOKです。
(例:Commandbars("ツールバー01").Controls(8).FaceID = 4)

変更には絵の番号が必要なのですが、それは、こちらのWebページをご参考にしてください。

また、絵を変えたいボタンの番号やそのボタンを含んでいるツールバーの名前なども必要なのですが、それは「BtnName_n_Index_Check01()」プロシージャなどや「BarName_n_Index_Check01()」プロシージャなどでチェックしてみてください。
  
  
★ ボタンのアイコンの絵を自作のビットマップの絵に変更する方法
※下図のようにボタンアイコンの絵には、オリジナルの絵を、イミディエイトで1行コードで設定(コピペ処理)することも可能です。

流れとしては、ペイントで絵を描いて、それをコピーしてクリップボードへ送り、それを「PasteFace」メソッドでボタンに貼り付けます。「PasteFace」はクリップボードにある画像(多分BMP)をボタンに貼り付けてくれる命令です。

(01)ペイントを開きます。
(02)16×16のキャンバス設定にします。
(03)あまりにちっこいので、最大限まで拡大表示します。
(04)好きな絵を描きます。
(05)一応、いったん保存します。(Officeやパソコンの再インストール後に同じ絵をアイコン復活させたいなら。)
(06)再度描いた絵を開いて、すべて選択したのち、「コピー」もします。(クリップボードに描いた画像を送る
(07)イミディエイトウィンドウで以下のようにコードを実行
Commandbars("対象のツールバー名").Controls(絵を変えたいボタンの番号).PasteFace

例:Commandbars("ツールバー01").Controls(8).PasteFace

※キャンバスの大きさは、16×16よりも多少大きくても大丈夫ですが、あまりに大きいとコードを実行しても絵が正常に表示されません。
50×50前後くらいでご自分でも色々と試してみてください。

※対象のツールバーの名前や、絵を変えたいボタンの番号を調べるには、おわりのほうの「★ 操作したいツールバーの削除やボタンなどについて調査、ボタンアイコンの絵の変更などのコード」を見てください。
その中の、「BtnName_n_Index_Check01()」プロシージャや「BarName_n_Index_Check01()」プロシージャなどであらかじめチェックしておきます。
  
  
★ テストコード01
以下のコードを標準モジュールにコピペして実行すると、「アドイン」タブと「ツールバー01」ツールバーが出来上がります。

★ テストコード02 少し作り変え
ツールバーの名前を一か所の書き換えだけで直せるように変更しました。
「StrBarChkTxt = "ツールバー01"」のところだけ「ツールバー01」を「ツールバー02」とか「ツールバー03」とか色々に直せば、その名前でツールバーが自動生成されます。

  
  
★ Wordの場合との違いについて

オートシェイプやテキストボックスなどを挿入するような、ExcelでもWordでも同じメニューなら、基本的にほぼ同じプログラム内容でWordでも行けます。

が、Wordの場合、まず、前述のテストプログラムでいうと、その中のすべての「OnAction 」の行の、「=」の右側が異なります。

Excelの場合は、テストプログラムのとおり、「 ×××.OnAction = ファイル名!標準モジュールのプロシージャ名」という形です。

例えば下記のようになります。

それに対してWordの場合は、マクロのボタンと例えば「挿_矢印_赤1()」というプログラムを紐付けしたい場合、つまり、メニューボタンを押したときに「挿_矢印_赤1()」というプログラムが実行されるようにしたい場合、「挿_矢印_赤1()」が書かれている標準モジュール名を指定します。
「 ×××.OnAction = 標準モジュール名.プロシージャ名」という形です。

例えば下記のようになります。

また、バージョンによってボタンのIDの番号が変わってくるかもしれないので、もしそうならその場合はさらに変えます。たとえばWord2010の場合、マクロのボタンのIDは「1」のようですので、すべての「myBar.Controls.Add ID:=2950」の「2950」を「1」に書き換えて、「myBar.Controls.Add ID:=1」とします。以下のような感じになります。

もちろん、ExcelにあってWordに無い命令・メニュー、の場合は同じプログラムは使えません。

ケースやプログラム内容によっては、丸ごとWordに転用できないこともあるかと思いますが、おおむね、このような違いさえ理解していただければ、オートシェイプを挿入するような、ExcelでもWordでも共通なメニューなら、根本的なプログラムとして書く内容は同じです。

※補足01
Wordの場合、メニュー関係の共用部品は「Normal.dot」というファイルに書くことが多いです。「Normal.dot」にプログラムを書くと、すべてのWordファイルにプログラムを保存・上書き保存・実行ができます。「docx」拡張子のファイルを開いていた時でも、「Normal.dot」ファイルにだけはVBAプログラムを保存・上書き保存・実行ができます。

※補足02
Excelの場合のメニュー関係の共用部品は、「C:\Users\ユーザー名\AppData\Roaming\Microsoft\Excel\XLSTART」というフォルダに、まず「PERSONAL.XLS」という名前の空のXLSファイルを作り、その中の標準モジュールに書いたプログラム(プロシージャ)の名前を指定します。標準モジュールの名前は何でもいいです。モジュール名には左右されません。Excelの場合、左右されるのはファイル名とプロシージャ名のみです。
Wordと同様、どのExcelファイルからもプログラムを保存・上書き保存・実行ができます。
  
  
★ 補足~さらなる応用

この仕組みを利用すると、例えば 下図のようなことができます。(ExcelではなくWordでの例の絵ですみませんが、同じことをするのでそちらの図を流用させていただきます。)

図01-ツールバーの自動配置

図02ボタンの動きの例-01

図03:ボタンの動きの例-02

上図のようにリボンに何もない状態から・・・、上図の例の場合のように、「挿入系ツールバー01」というツールバーと、「テキスト操作系ツールバー01」というツールバーが生成されるようにし、前者においては矩形や矢印などを自動挿入、後者においては段落とフォントの自動設定、等々のボタンを配置する・・・、ということができます。そしてそれらの作業がラクに行えるようにする・・・、といったことができます。

このようなプログラムは、Excel2003、Excel2000などの、古いバージョンでもそのまま使えます。

といいますか、本当は 旧バージョンで動くプログラムをバージョン2010でも試してみたら、一応動いてしまい、「完全じゃないけどまあそれなりに使える」という状況になっていたものですから、ご紹介させて頂きました。

本来は、リボンを直接操作するプログラムで「矩形や矢印などを自動挿入のボタン」などをリボンに作るべきだと思いますが、面倒なので、古いバージョンのプログラムでやってみました。(全バージョン共通で動くものがあれば、もともとたくさんのメニューボタンを作るわけではないので それはそれで使いやすいかと思い無理矢理動かして使っています・・・。)
  
  
★ 操作したいツールバーの削除やボタンなどについて調査、ボタンアイコンの絵の変更などのコード

  
  
  
※関連記事
Word2010のリボンに、Word2000と同じプログラムコードのコピペでユーザー設定ボタンを生成する。(一応ツールバー単位で)
https://euc-access-excel-db.com/tips/ct08_exceltruebasic/ct080860_vba_basic/tool-bar-auto-make-word