【VBA】ユーザーフォームのスピンボタンを活用する

こんにちは、Ryoです。
VBAで利用する機会の多いUserFormですが、特定の範囲を増減させるインターフェースとしてスピンボタンがあります。クリック操作で値を増減させることが出来るので何かと使用する機会も多いのではないでしょうか。今回はそのスピンボタンの値設定や取得、増減幅設定やボタンを押した際のイベントなどについて書いていきます。



1.サンプル概要

画像では動作を表現できないので、ちょっとわかりにくい感じがしますがUserFormにスピンボタンとテキストボックスを配置しています。

サンプルコードでは最小値を100、増減分を2としていますので上▲を押せば加算、下▼を押せば減算されます。

わかりにくいですね(笑)
では、まずUseFormから解説していきます。

2.ユーザーフォーム構成

サンプルで使用するUseFormは以下の通り配置しています。

シンプルな構成なので困ることは無いと思いますが、TextBox1の表示が小さいと見にくかったのでサンプルでは以下のようにFontをメイリオ、TextAlignを中央(fmTextAlignCenter)にしています。

Fontサイズはメイリオに設定する際に18としていますので、ご参考までに。

SpinButtonのプロパティはサンプルコード内で設定するので、エディタ画面上で設定しなくても大丈夫です。

ここまで出来たらスピンボタンをダブルクリックしてコードの記述に移ります。

3.サンプルコード

Private Sub SpinButton1_Change()

  With SpinButton1
    .Max = 1000 'Max値(最大2,147,483,647)
    .Min = 100  'Min値(最小-2,147,483,648)
    '※Max初期値は100、Min初期値は0です。
    'スピンボタンクリックによる増減値(初期値:1)
    .SmallChange = 2
    'クリック~動作までの時間(初期値50)
    .Delay = 50
  End With
  
  'TextBox1にSpinButton1の値を表示
  TextBox1.Value = SpinButton1.Value

End Sub

SpinButtonをダブルクリックしてエディタ画面を開くと、自動的にPrivate Sub SpinButton1_Change()になっていると思います。

その中にSpinButtonのプロパティを設定していきます。
「Max」は最大値「Min」は最小値で初期設定はコード内コメントの通りです。この値も無限では無いので-2,147,483,648~2,147,483,647の範囲である必要があります。

次に増減値ですが、初期値は「1」なので変更したい場合はSmallChange = 任意の値として設定します。

後はクリックしてから数値の増減動作までの待機時間を設定するDelay = 任意の値(初期値50)がありますが、ここは数値を小さくしすぎると1クリック動作がかなりシビアになるので、私個人としては初期値の50前後が良いような気がします。

ここまでで主なプロパティ設定は完了なので、後はSpinButtonの値を取得してTextBoxに表示します。値を取得するには、SpinButton1.ValueでOKなので、それをTextBoxに表示しますから記述としてはTextBox1.Value = SpinButton1.Valueとなります。

これで実行させれば100~1,000の範囲で2毎に加算/減算しテキストボックスに表示します。

◆参考・・・スピンボタンのイベント処理

スピンボタンの上▲、又は下▼を押した際にイベントを発生させることが出来ます。
上▲は「SpinUp」下▼は「SpinDown」になります。

例として上で使用したUserFormにTextBox2を配置して、そこに▲を押したら「加算」、▼を押したら「減算」と表示するサンプルコードを以下に示します。

Private Sub SpinButton1_SpinUp()

TextBox2.Value = "加算"

End Sub
Private Sub SpinButton1_SpinDown()

TextBox2.Value = "減算"

End Sub

これで動作させると、以下画像のような表示になります。

≪スピンボタン上▲≫

≪スピンボタン下▼≫

至って簡単なサンプルですが、このようにイベント処理も出来ることを知っておくと何かの役に立つかもしれませんね。

4.まとめ

スピンボタンの設定自体はそれほど難しいことも無いので、使いやすいコントロールだと思います。後は使い勝手上の問題ですが、Delay設定の条件はユーザー操作の難易度に関わるので慎重に(笑)




イベント処理も出来ますから、知っておくとUserFormの幅が広がりますね。機会があればぜひご活用くださいませ!

以上、ユーザーフォームのスピンボタンを活用する方法についてでした!
今回の記事が何かの参考になれば幸いです。

Ryo

スポンサーリンク
スポンサーリンク

楽天トラベル

シェアする

フォローする

スポンサーリンク

楽天トラベル