top of page

ボタン設置グループ「▲▼ボタン(スピンボタン)」の解説

概要

 書籍「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コントロールのスピンボタンはExcel上で廃止前提ですので使用は非推奨とします。)

通常のスピンボタンの設置方法

 紹介しているリボン登録マクロによる「▲▼ボタン」の設置は、この通常のやり方よりも高速かつ、柔軟な設定でスピンボタンが設置可能です。

 さらに、上記図にも書いてありますが、フォームコントロールによるスピンボタンは次のようなことができません。

  • 0未満(マイナスの値)は設定不可能

  • 変化量は整数単位のみ(0.1などは設定不可)

  • 最小値、最大値は必ず設定しなければならない

  • 最大値は最大30000まで ⇒ 日付の増減には使えない


 リボン登録マクロの「▲▼ボタン」ではこれらの「フォームコントロール」のスピンボタンでできないことも実現しています。

  • 最小値、最大値はマイナスの値も設定可能

  • 変化量は少数単位、マイナスの値も設定可能

  • 最小値、最大値は省略して下限、上限を無くすことも可能

  • 30000を超える値も対応しているので日付のシリアル値にも対応可能


 実際に次の動画のようなスピンボタンを設置可能です。




 「▲▼ボタン」の仕組み

「▲▼ボタン」の仕組みを簡単に説明すると次のようになります。

  • 「▲▼ボタン」は「▲」ボタンと「▼」ボタンの別々のコマンドボタンで構成されている

  • 「▲」ボタンと「▼」ボタンにはそれぞれ名前が設定してある。

  • 「▲」ボタンと「▼」ボタンには同じマクロが登録されており、それぞれの設定してある名前をもとに別々の処理を行っている。


 ボタンの名前に設定を保管

 以降詳しく解説します。

 「▲」ボタンと「▼」ボタンには下記図のようにそれぞれ名前が設定してあります。

 下記図では「変化量0.1、最小値-1、最大値+1」の▲▼ボタンの場合の設定です。

 「▲」ボタンには「F2_Up_0.1_-1_1」、「▼」ボタンには「F2_Down_0.1_-1_1」の名前が設定してあり、この名前が「▲▼ボタン」の設定情報となります。

ボタンの名前設定

 この名前はアンダーバー「"_"」で繋いで5つの情報を格納してあります。具体的に次のようになっています。

[対象セルアドレス(または名前定義)」_「Up/Down」_「変化量」_「最小値」_「最大値」

 上記例の「▲」ボタンには「F2_Up_0.1_-1_1」の場合は

  • 対象セルのアドレスは「F2」

  • Up・・・増加方向の処理を行う

  • 変化量は0.1

  • 最小値は-1

  • 最大値は+1

 として処理されます。


「▼」ボタンには「F2_Down_0.1_-1_1」の場合は2番目の情報が「Down」なので減少方向の処理を行うようになります。


 「▲」ボタンと「▼」ボタンはどちらも「ClickSpinButton_OnAction」というマクロ(プロシージャ名)が登録されています。

ボタンに登録されてあるマクロ


 ▲▼ボタンに登録してあるマクロ「ClickSpinButton_OnAction」

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

ClickSpinButton_OnAction

 「ClickSpinButton」の中身は下記図で解説しています。ポイントだけ抑えると次の通りです。

  • Application.Callerメソッドにてクリックされたボタンの名前を取得

  • ボタンの名前「変数:ShapeName」よりスピンボタンの設定を取得

  • GetCellByNameプロシージャを利用して処理対象のセルを参照する

  • ChangeValueCellで増減の処理を行う

ClickSpinButton

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

GetCellByName

 ChangeValueCellの仕組みは次のようになっています。

 「増加or減少」「変化量」「最小値、最大値に達しているか」などをまとめて処理を行って、対象セル「Target」の値を変化させています。

 ちなみに「MaxValue」「MinValue」は増減の最大値、最小値を示していますが、こちらのデフォルト値が「-9999」となっている理由は、もし通常のデフォルト値で「0」としてしまうと最大値、最小値が0となってしまい正常に処理ができなくなります。ですので、現実的に入力しないであろう「-9999」をデフォルト値として、このデフォルト値が引数で渡されれば「最大値無し⇒上限なし」「最小値無し⇒下限無し」のような処理を実現できるようになっています。

ChangeValueCell

 リボン登録マクロ「▲▼ボタン」のクリックでコードの自動生成している

 リボン登録マクロ「▲▼ボタン」をクリックすると最初の動画の様に「対象セル」「変化量」「最小値」「最大値」などを設定すると「▲▼ボタン」が自動的に設置されていますが、これ以外に上記で説明した下記プロシージャをブック内に自動的にコードを記述しています。

  • ClickSpinButton_OnAction

  • ClickSpinButton

  • GetCellByName

  • ChangeValueCell


 さらに説明すると、標準モジュール「Mod93_SpinButton」を自動的に追加して、上記の4つのプロシージャを「Mod93_SpinButton」の中に自動的に記述するような処理を行っています。

Mod93_SpinButtonモジュールの自動追加

コメント


softex-celware

​インボイス登録番号:T5810983887134

  • Facebook
  • Twitter
  • YouTube

©2023 softex-celware。Wix.com で作成されました。

bottom of page