VBAでのスピンボタン(SpinButton)の使い方とプロパティおよびイベント
Excel VBA からスピンボタン(SpinButton)コントロールを利用する方法です。数値を直接入力する代わりに、スピンボタンをクリックして数値を変化させる場合に使用されるコントロールです。ここでは Excel のユーザーフォームで設置できるスピンボタンを VBA から使用する方法と、スピンボタンで設定可能なプロパティおよびイベントの一覧について解説します。
(Last modified: )
目次
スピンボタンのプロパティ一覧
ユーザーフォームに設置するスピンボタンで利用可能なプロパティ一覧は次の通りです。
BackColor ControlSource ControlTipText Delay Enabled ForeColor Height HelpContextID Left Max Min MouseIcon MousePointer Orientation SmallChange TabIndex TabStop Tag Top Value Visible Width
スピンボタンの既定のプロパティは Value
プロパティです。こ
いくつかのプロパティについてはこのあと簡単に解説します。
スピンボタンの値を取得または設定する(Value)
スピンボタンコントロールは数値を入力するときに値を直接入力するのではなく、スピンボタンをクリックすることによって数値を変化させたい場合に使用します。例えばラベルとスピンボタンを設置し、スピンボタンをクリックしたときにラベルに数値を表示させてみます。(ラベルはフォントサイズを変更し、右寄せに変更してあります)。
スピンボタンの値は Value
プロパティで取得または設定することができます。
オブジェクト.Value [= Variant ]
スピンボタンの初期値を設定する場合は Value
プロパティに値を設定してください。
具体的には次のように記述します。下記ではユーザーフォームが表示される前に発生する Initialize
イベントに対するイベントプロシージャにコードを記述し、スピンボタンの初期値を設定しています。同時にラベルの Caption
プロパティにもスピンボタンの初期値を設定しています。
Option Explicit Private Sub UserForm_Initialize() SpinButton1.Value = 5 Label1.Caption = SpinButton1.Value End Sub
またスピンボタンをクリックしてスピンボタンの値が変化すると Change
イベントが発生します。このイベントのイベントプロシージャの中でスピンボタンの値を取得し、ラベルの Caption
プロパティに表示するように記述してみます。
Option Explicit Private Sub SpinButton1_Change() Label1.Caption = SpinButton1.Value End Sub
この 2 つのイベントプロシージャを記述しました。
ユーザーフォームを表示したあと、スピンボタンの矢印をクリックしてみてください。スピンボタンの値が変化し、その値がラベルに表示されます。
このようにスピンボタンを使用することで値を直接入力する代わりに、スピンボタンをクリックすることで値を変化させることができます。
スピンボタンの最大値と最小値を設定する(Max,Min)
スピンボタンの最大値を設定するには Max
プロパティに値を設定します。最小値を設定するには Min
プロパティに値を設定します。
オブジェクト.Max [= Long ] オブジェクト.Min [= Long ]
最大値および最小値の値として Long
型の整数の値を設定します。デフォルトの値は最大値が 100 で最小値が 0 に設定されています。
なお Max
プロパティの値が Mix
プロパティの値より小さい値にしても構いません。その場合はスピンボタンの矢印をクリックしたときの増減が逆になります。
具体的には次のように記述します。下記ではユーザーフォームが表示される前に発生する Initialize
イベントに対するイベントプロシージャにコードを記述し、スピンボタンの最大値および最小値を設定しています。またスピンボタンの初期値も設定しています。
Option Explicit Private Sub UserForm_Initialize() SpinButton1.Max = 12 SpinButton1.Min = 1 SpinButton1.Value = 1 Label1.Caption = SpinButton1.Value End Sub Private Sub SpinButton1_Change() Label1.Caption = SpinButton1.Value End Sub
ユーザーフォームを表示すると、スピンボタンが表示されます。
スピンボタンの上矢印をクリックしていくと数値が増加していき、最大値に設定した 12 まで増加させることができます。それ以上は矢印をクリックしても増加しません。
スピンボタンの下矢印をクリックしていくと数値が減少していき、最小値に設定した 1 まで減少させることができます。それ以下には矢印をクリックしても減少しません。
スピンボタンのクリック時の変化量を設定する(SmallChange)
スピンボタンの矢印の部分をクリックしたときに、値がどれだけ変化するのかを設定するには SmallChange
プロパティに値を設定します。
オブジェクト.SmallChange [= Long ]
矢印をクリックしたときにスピンボタンの値をどれだけ変化させるのかを Long
型の整数の値で指定してください。デフォルトの値はどちらも 1 に設定されています。
具体的には次のように記述します。下記ではユーザーフォームが表示される前に発生する Initialize
イベントに対するイベントプロシージャにコードを記述し、スピンボタンをクリックしたときの変化量を設定しています。またスピンボタンの初期値も設定しています。
Option Explicit Private Sub UserForm_Initialize() SpinButton1.Max = 50 SpinButton1.Min = 10 SpinButton1.SmallChange = 5 SpinButton1.Value = 10 Label1.Caption = SpinButton1.Value End Sub Private Sub SpinButton1_Change() Label1.Caption = SpinButton1.Value End Sub
ユーザーフォームを表示すると、スピンボタンが表示されます。
スピンボタンの矢印をクリックすると SmallChange
プロパティに設定した 5 ずつ値が変化します。
スピンボタンの向きを設定する(Orientation)
スピンボタンの垂直方向の向きにするか水平方向の向きにするか設定するには Orientation
プロパティに値を設定します。
オブジェクト.Orientation [= fmOrientation ]
設定可能な値は次の通りです。
定数 | 値 | 説明 |
---|---|---|
fmOrientationAuto | -1 | スピンボタンの幅と高さの比較で自動的に向きが決まる |
fmOrientationVertical | 0 | 垂直方向の向きに設定される |
fmOrientationHorizontal | 1 | 水平方向の向きに設定される |
デフォルトの値は fmOrientationAuto
となっておりコントロールを設置したときの幅と高さで向きが決まります。幅の方が高さよりも大きければ水平方向、高さの方が幅よりも大きければ垂直方向となります。幅と高さの比較に関係なく向きを設定したい場合に fmOrientationVertical
または fmOrientationHorizontal
を設定されてください。
具体的には次のように記述します。下記ではユーザーフォームが表示される前に発生する Initialize
イベントに対するイベントプロシージャにコードを記述し、スピンボタンの向きを固定で垂直方向に設定しています。
Option Explicit Private Sub UserForm_Initialize() SpinButton1.Orientation = fmOrientationVertical End Sub
ユーザーフォームを表示すると、スピンボタンの幅の方が高さよりも大きいにも関わらずスピンボタンの向きが垂直方向になっています。
スピンボタンの表示位置を設定する(Top,Left)
スピンボタンが表示される位置を設定するには Top
プロパティと Left
プロパティに値を設定します。
オブジェクト.Top [= Single ] オブジェクト.Left [= Single ]
Top
プロパティにはユーザーフォームの上端からスピンボタンの上端までの距離、 Left
プロパティにはユーザーフォームの左端からスピンボタンの左端までの距離をそれぞれ単精度浮動小数点型の数値で代入します。単位はポイントです。
具体的には次のように記述します。下記ではユーザーフォームが表示される前に発生する Initialize
イベントに対するイベントプロシージャにコードを記述し、スピンボタンの位置を設定しています。
Option Explicit Private Sub UserForm_Initialize() Label1.Top = 70 Label1.Left = 60 SpinButton1.Top = 70 SpinButton1.Left = 40 End Sub
ユーザーフォームを表示すると、表示されたスピンボタンが指定した位置で表示されているのが確認できます。
スピンボタンの幅と高さを設定する(Width,Height)
スピンボタンの幅と高さを設定するには幅については Width
プロパティ、高さについては Height
プロパティに値を設定します。
オブジェクト.Width [= Single ] オブジェクト.Height [= Single ]
幅および高さをあらわす単精度浮動小数点型の数値を代入してください。単位はポイントです。
具体的には次のように記述します。下記ではユーザーフォームが表示される前に発生する Initialize
イベントに対するイベントプロシージャにコードを記述し、スピンボタンの幅と高さを設定しています。
Option Explicit Private Sub UserForm_Initialize() SpinButton1.Width = 30 SpinButton1.Height = 80 End Sub
ユーザーフォームを表示すると、表示されたスピンボタンの幅および高さが指定した値に設定されているのが確認できます。
スピンボタンの文字色と背景色を設定する(ForeColor,BackColor)
スピンボタンに表示されている矢印の文字色を設定するには ForeColor
プロパティを使用します。スピンボタンの背景色を設定するには BackColor
プロパティを使用します。
オブジェクト.ForeColor [= Long ] オブジェクト.BackColor [= Long ]
対象のオブジェクトの ForeColor
プロパティ、または BackColor
プロパティに対して色を表す長整数型の値を代入します。値は Windows のシステムカラーを表す値や定数、または青緑赤の値を使った色を表す値を代入します。なお背景色を設定する場合は背景が不透明になっている必要があります。
具体的には次のように記述します。今回は RGB 関数を使って色を指定しました( RGB 関数の使い方については「RGB関数:色を表す数値を取得する」を参照されてください)。下記ではユーザーフォームが表示される前に発生する Initialize イベントに対するイベントプロシージャにコードを記述し、スピンボタンの文字色と背景色を設定しています。
Option Explicit Private Sub UserForm_Initialize() SpinButton1.ForeColor = RGB(255, 255, 255) SpinButton1.BackColor = RGB(0, 74, 127) End Sub
ユーザーフォームを表示すると、表示されたスピンボタンの文字色および背景色の設定が行われているのが確認できます。(スピンボタンのスクロールボックスと矢印の間の部分の色は、設定した背景色から自動的に色が決まるようです)。
スピンボタンのイベント一覧
スピンボタンで発生するイベント一覧は次の通りです。
AfterUpdate BeforeDragOver BeforeDropOrPaste BeforeUpdate Change Enter Error Exit KeyDown KeyPress KeyUp SpinDown SpinUp
スピンボタンの既定のイベントは Change
イベントです。
-- --
Excel のユーザーフォームで設置できるスピンボタンを VBA から使用する方法と、スピンボタンで設定可能なプロパティおよびイベントの一覧について解説しました。
( Written by Tatsuo Ikura )
著者 / TATSUO IKURA
これから IT 関連の知識を学ばれる方を対象に、色々な言語でのプログラミング方法や関連する技術、開発環境構築などに関する解説サイトを運営しています。