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)(1)

スピンボタンの値は 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 つのイベントプロシージャを記述しました。

スピンボタンの値を取得または設定する(Value)(2)

ユーザーフォームを表示したあと、スピンボタンの矢印をクリックしてみてください。スピンボタンの値が変化し、その値がラベルに表示されます。

スピンボタンの値を取得または設定する(Value)(3)

スピンボタンの値を取得または設定する(Value)(4)

このようにスピンボタンを使用することで値を直接入力する代わりに、スピンボタンをクリックすることで値を変化させることができます。

スピンボタンの最大値と最小値を設定する(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

スピンボタンの最大値と最小値を設定する(Max,Min)(1)

スピンボタンの最大値と最小値を設定する(Max,Min)(2)

ユーザーフォームを表示すると、スピンボタンが表示されます。

スピンボタンの最大値と最小値を設定する(Max,Min)(3)

スピンボタンの上矢印をクリックしていくと数値が増加していき、最大値に設定した 12 まで増加させることができます。それ以上は矢印をクリックしても増加しません。

スピンボタンの最大値と最小値を設定する(Max,Min)(4)

スピンボタンの最大値と最小値を設定する(Max,Min)(4)

スピンボタンの下矢印をクリックしていくと数値が減少していき、最小値に設定した 1 まで減少させることができます。それ以下には矢印をクリックしても減少しません。

スピンボタンの最大値と最小値を設定する(Max,Min)(5)

スピンボタンのクリック時の変化量を設定する(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)(1)

スピンボタンのクリック時の変化量を設定する(SmallChange)(2)

ユーザーフォームを表示すると、スピンボタンが表示されます。

スピンボタンのクリック時の変化量を設定する(SmallChange)(3)

スピンボタンの矢印をクリックすると SmallChange プロパティに設定した 5 ずつ値が変化します。

スピンボタンのクリック時の変化量を設定する(SmallChange)(4)

スピンボタンの向きを設定する(Orientation)

スピンボタンの垂直方向の向きにするか水平方向の向きにするか設定するには Orientation プロパティに値を設定します。

オブジェクト.Orientation [= fmOrientation ]

設定可能な値は次の通りです。

定数説明
fmOrientationAuto-1スピンボタンの幅と高さの比較で自動的に向きが決まる
fmOrientationVertical0垂直方向の向きに設定される
fmOrientationHorizontal1水平方向の向きに設定される

デフォルトの値は fmOrientationAuto となっておりコントロールを設置したときの幅と高さで向きが決まります。幅の方が高さよりも大きければ水平方向、高さの方が幅よりも大きければ垂直方向となります。幅と高さの比較に関係なく向きを設定したい場合に fmOrientationVertical または fmOrientationHorizontal を設定されてください。

スピンボタンの向きを設定する(Orientation)(1)

具体的には次のように記述します。下記ではユーザーフォームが表示される前に発生する Initialize イベントに対するイベントプロシージャにコードを記述し、スピンボタンの向きを固定で垂直方向に設定しています。

Option Explicit

Private Sub UserForm_Initialize()
    SpinButton1.Orientation = fmOrientationVertical
End Sub

スピンボタンの向きを設定する(Orientation)(3)

スピンボタンの向きを設定する(Orientation)(3)

ユーザーフォームを表示すると、スピンボタンの幅の方が高さよりも大きいにも関わらずスピンボタンの向きが垂直方向になっています。

スピンボタンの向きを設定する(Orientation)(4)

スピンボタンの表示位置を設定する(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

スピンボタンの表示位置を設定する(Top,Left)(1)

スピンボタンの表示位置を設定する(Top,Left)(2)

ユーザーフォームを表示すると、表示されたスピンボタンが指定した位置で表示されているのが確認できます。

スピンボタンの表示位置を設定する(Top,Left)(3)

スピンボタンの幅と高さを設定する(Width,Height)

スピンボタンの幅と高さを設定するには幅については Width プロパティ、高さについては Height プロパティに値を設定します。

オブジェクト.Width [= Single ]
オブジェクト.Height [= Single ]

幅および高さをあらわす単精度浮動小数点型の数値を代入してください。単位はポイントです。

具体的には次のように記述します。下記ではユーザーフォームが表示される前に発生する Initialize イベントに対するイベントプロシージャにコードを記述し、スピンボタンの幅と高さを設定しています。

Option Explicit

Private Sub UserForm_Initialize()
    SpinButton1.Width = 30
    SpinButton1.Height = 80
End Sub

スピンボタンの幅と高さを設定する(Width,Height)(1)

スピンボタンの幅と高さを設定する(Width,Height)(2)

ユーザーフォームを表示すると、表示されたスピンボタンの幅および高さが指定した値に設定されているのが確認できます。

スピンボタンの幅と高さを設定する(Width,Height)(3)

スピンボタンの文字色と背景色を設定する(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

スピンボタンの文字色と背景色を設定する(ForeColor,BackColor)(1)

スピンボタンの文字色と背景色を設定する(ForeColor,BackColor)(2)

ユーザーフォームを表示すると、表示されたスピンボタンの文字色および背景色の設定が行われているのが確認できます。(スピンボタンのスクロールボックスと矢印の間の部分の色は、設定した背景色から自動的に色が決まるようです)。

スピンボタンの文字色と背景色を設定する(ForeColor,BackColor)(3)

スピンボタンのイベント一覧

スピンボタンで発生するイベント一覧は次の通りです。

AfterUpdate
BeforeDragOver
BeforeDropOrPaste
BeforeUpdate
Change
Enter
Error
Exit
KeyDown
KeyPress
KeyUp
SpinDown
SpinUp

スピンボタンの既定のイベントは Change イベントです。

-- --

Excel のユーザーフォームで設置できるスピンボタンを VBA から使用する方法と、スピンボタンで設定可能なプロパティおよびイベントの一覧について解説しました。

( Written by Tatsuo Ikura )

Profile
profile_img

著者 / TATSUO IKURA

プログラミングや開発環境構築の解説サイトを運営しています。