ボタン設置グループ「◀▶ボタン(スピンボタン)」の解説
- yuji fukami
- 10月24日
- 読了時間: 5分
概要
書籍「Excel VBA開発を超効率化するプログラミングテクニック」の特典であるIkiKaiso2.xlamのリボン登録マクロの解説のための特設ページです。
出版社の書籍のページ⇒https://gihyo.jp/book/2024/978-4-297-14023-6
リボン登録マクロ全体解説ページ⇒https://www.softex-celware.com/post/ikikaiso2
本ページではIkiKaiso2.xlamの「ボタン設置」グループの「◀▶ボタン(スピンボタン)」の解説をします。

「◀▶ボタン」は隣の「▲▼ボタン」との姉妹機能ですが、「▲▼ボタン」の使い方の記事と何点か重複する内容で本記事は作成しております。
解説
用途
特定のセルの値を増減させる◀▶ボタン(左右ボタン、スピンボタン)の設置を効率的に行う
使い方
実際に使っている様子の動画を下記でご確認ください。
手順は次の通りです。
①:◀▶ボタンを設置するセル範囲を選択する
②:「◀▶ボタン」をクリック
③:値の増減の変化量をインプットボックスで入力してOK
④:値の増減の最小値をインプットボックスで入力してOK(何も入力しなかった場合は増減の下限無し)
⑤:値の増減の最大値をインプットボックスで入力してOK(何も入力しなかった場合は増減の上限無し)
⑥:◀▶ボタンが自動的に設置される。
通常のやり方およびその比較
◀▶ボタンは一般的に「スピンボタン」と呼びます。
スピンボタンの通常の設定の仕方は下記図のように「フォームコントロール」を利用する方法がありますが、「フォームコントロール」のスピンボタンは下記図のように必ず「▲▼」ボタンとなり「◀▶」と表示されるボタンは設置不可能です。(ちなみにActiveXコントロールのスピンボタンでは「◀▶」ボタンは設置可能ですが、ActiveXコントロールはExcel上で廃止前提ですので使用は非推奨とします。)

ちなみに「設置したボタンを90度回転させればよい」と思いつく方もいるかもしれませんが、残念ながら下記図のように「フォームコントロール」のスピンボタンは回転は不可能となっています。

紹介しているリボン登録マクロによる「◀▶ボタン」の設置は、上記の様にフォームコントロールでは出来ないような「◀▶」のボタンの設置が可能となります。
またそれ以外の機能等の解説は「▲▼ボタン」と被るので、下記リンクも参照して読んでいただけると助かります。
「◀▶ボタン」の仕組み
「◀▶ボタン」の仕組みを簡単に説明すると次のようになります。
「◀▶ボタン」は「◀」ボタンと「▶」ボタンの別々のコマンドボタンで構成されている
「◀」ボタンと「▶」ボタンにはそれぞれ名前が設定してある。
「◀」ボタンと「▶」ボタンには同じマクロが登録されており、それぞれの設定してある名前をもとに別々の処理を行っている。
ボタンの名前に設定を保管
以降詳しく解説します。
「◀」ボタンと「▶」ボタンには下記図のようにそれぞれ名前が設定してあります。
下記図では「変化量1、最小値0、最大値10」の◀▶ボタンの場合の設定です。
「◀」ボタンには「C2_Down_1_0_10」、「▶」ボタンには「C2_Up_1_0_10」の名前が設定してあり、この名前が「◀▶ボタン」の設定情報となります。

この名前はアンダーバー「"_"」で繋いで5つの情報を格納してあります。具体的に次のようになっています。
[対象セルアドレス(または名前定義)」_「Up/Down」_「変化量」_「最小値」_「最大値」
上記例の「▶」ボタンには「C2_Up_1_0_10」の場合は
対象セルのアドレスは「C2」
Up・・・増加方向の処理を行う
変化量は1
最小値は0
最大値は10
として処理されます。
「◀」ボタンには「C2_Down_1_0_10」の場合は2番目の情報が「Down」なので減少方向の処理を行うようになります。
「◀」ボタンと「▶」ボタンはどちらも「ClickSpinButton_OnAction」というマクロ(プロシージャ名)が登録されています。

◀▶ボタンに登録してあるマクロ「ClickSpinButton_OnAction」
◀▶ボタンに登録してあるマクロ「ClickSpinButton_OnAction」について詳しく解説します。「ClickSpinButton_OnAction」では別途「ClickSpinButton」を実行する用にしています。

「ClickSpinButton」の中身は下記図で解説しています。ポイントだけ抑えると次の通りです。
Application.Callerメソッドにてクリックされたボタンの名前を取得
ボタンの名前「変数:ShapeName」よりスピンボタンの設定を取得
GetCellByNameプロシージャを利用して処理対象のセルを参照する
ChangeValueCellで増減の処理を行う

GetCellByNameは名前定義やアドレスをもとにセルを参照する処理ですが、On Error Resume Nextを利用して、引数で渡された名前定義が存在しない場合にエラーを起こさずNothingを返すようにしています。これによって、ユーザーが困惑するようなエラーは表示せずに「処理自体は実行されない」ように構築しています。

ChangeValueCellの仕組みは次のようになっています。
「増加or減少」「変化量」「最小値、最大値に達しているか」などをまとめて処理を行って、対象セル「Target」の値を変化させています。
ちなみに「MaxValue」「MinValue」は増減の最大値、最小値を示していますが、こちらのデフォルト値が「-9999」となっている理由は、もし通常のデフォルト値で「0」としてしまうと最大値、最小値が0となってしまい正常に処理ができなくなります。ですので、現実的に入力しないであろう「-9999」をデフォルト値として、このデフォルト値が引数で渡されれば「最大値無し⇒上限なし」「最小値無し⇒下限無し」のような処理を実現できるようになっています。

リボン登録マクロ「◀▶ボタン」のクリックでコードの自動生成している
リボン登録マクロ「◀▶ボタン」をクリックすると最初の動画の様に「対象セル」「変化量」「最小値」「最大値」などを設定すると「◀▶ボタン」が自動的に設置されていますが、これ以外に上記で説明した下記プロシージャをブック内に自動的にコードを記述しています。
ClickSpinButton_OnAction
ClickSpinButton
GetCellByName
ChangeValueCell
さらに説明すると、標準モジュール「Mod93_SpinButton」を自動的に追加して、上記の4つのプロシージャを「Mod93_SpinButton」の中に自動的に記述するような処理を行っています。




コメント