VBAでのスクロールバー(ScrollBar)の使い方とプロパティおよびイベント

Excel VBA からスクロールバー(ScrollBar)コントロールを利用する方法です。数値を直接入力する代わりに、スクロールバーを動かして数値を変化させる場合に使用されるコントロールです。ここでは Excel のユーザーフォームで設置できるスクロールバーを VBA から使用する方法と、スクロールバーで設定可能なプロパティおよびイベントの一覧について解説します。

※ スクロールバーコントロールは他のコントロールの右や下に表示されるスクロールバーとは異なります。コントロールにスクロールバーを表示するかどうかなどを設定されたい場合は「コントロールでスクロールバーを表示するか設定する(ScrollBarsプロパティ)」を参照されてください。

(Last modified: )

スクロールバーのプロパティ一覧

ユーザーフォームに設置するスクロールバーで利用可能なプロパティ一覧は次の通りです。

BackColor
ControlSource
ControlTipText
Delay
Enabled
ForeColor
Height
HelpContextID
LargeChange
Left
Max
Min
MouseIcon
MousePointer
Orientation
ProportionalThumb
SmallChange
TabIndex
TabStop
Tag
Top
Value
Visible
Width

スクロールバーの既定のプロパティは Value プロパティです。こ

いくつかのプロパティについてはこのあと簡単に解説します。

スクロールバーの値を取得または設定する(Value)

スクロールバーコントロールは数値を入力するときに値を直接入力するのではなく、スクロールバーを動かすことによって数値を変化させたい場合に使用します。例えばラベルとスクロールバーを設置し、スクロールバーを動かしたときにラベルに数値を表示させてみます。(ラベルはフォントサイズを変更し、右寄せに変更してあります)。

スクロールバーの値を取得または設定する(Value)(1)

スクロールバーの値は Value プロパティで取得または設定することができます。

オブジェクト.Value [= Variant ]

スクロールバーの初期値を設定する場合は Value プロパティに値を設定してください。

具体的には次のように記述します。下記ではユーザーフォームが表示される前に発生する Initialize イベントに対するイベントプロシージャにコードを記述し、スクロールバーの初期値を設定しています。同時にラベルの Caption プロパティにもスクロールバーの初期値を設定しています。

Option Explicit

Private Sub UserForm_Initialize()
    ScrollBar1.Value = 0
    Label1.Caption = ScrollBar1.Value
End Sub

またスクロールバーをクリックするなどしてスクロールバーの値が変化すると Change イベントが発生します。このイベントのイベントプロシージャの中でスクロールバーの値を取得し、ラベルの Caption プロパティに表示するように記述してみます。

Option Explicit

Private Sub ScrollBar1_Change()
    Label1.Caption = ScrollBar1.Value
End Sub

この 2 つのイベントプロシージャを記述しました。

スクロールバーの値を取得または設定する(Value)(2)

ユーザーフォームを表示したあと、スクロールバーの両端にある矢印をクリックしたり、スクロールバーの中にあるスクロールボックスをドラッグして動かしてみてください。スクロールバーの値が変化し、その値がラベルに表示されます。

スクロールバーの値を取得または設定する(Value)(3)

スクロールバーの値を取得または設定する(Value)(4)

スクロールバーの値を取得または設定する(Value)(5)

このようにスクロールバーを使用することで値を直接入力する代わりに、スクロールバーを動かすことで値を変化させることができます。

スクロールバーの最大値と最小値を設定する(Max,Min)

スクロールバーの最大値を設定するには Max プロパティに値を設定します。最小値を設定するには Min プロパティに値を設定します。

オブジェクト.Max [= Long ]
オブジェクト.Min [= Long ]

最大値および最小値の値として Long 型の整数の値を設定します。デフォルトの値は最大値が 32767 で最小値が 0 に設定されています。

なお Max プロパティの値はスクロールバーの右端または一番下の値で、 Mix プロパティの値はスクロールバーの左端または一番上の値です。場合によっては Max プロパティの値が Min プロパティの値よりも小さくても構いません。その場合はスクロールバーを動かすと値が減少していくことになります。

具体的には次のように記述します。下記ではユーザーフォームが表示される前に発生する Initialize イベントに対するイベントプロシージャにコードを記述し、スクロールバーの最大値および最小値を設定しています。またスクロールバーの初期値も設定しています。

Option Explicit

Private Sub UserForm_Initialize()
    ScrollBar1.Max = 50
    ScrollBar1.Min = -50

    ScrollBar1.Value = 0
    Label1.Caption = ScrollBar1.Value
End Sub

Private Sub ScrollBar1_Change()
    Label1.Caption = ScrollBar1.Value
End Sub

スクロールバーの最大値と最小値を設定する(Max,Min)(1)

スクロールバーの最大値と最小値を設定する(Max,Min)(2)

ユーザーフォームを表示すると、スクロールバーが表示されます。最小値が -50 で最大値を 50 に設定してあり、初期値を 0 に設定しているため、スクロールボックスはちょうど中間あたりに表示されています。

スクロールバーの最大値と最小値を設定する(Max,Min)(3)

スクロールボックスを一番右まで移動すると最大値に設定した値となります。

スクロールバーの最大値と最小値を設定する(Max,Min)(4)

スクロールボックスを一番左まで移動すると最小値に設定した値となります。

スクロールバーの最大値と最小値を設定する(Max,Min)(5)

スクロールバーのクリック時の変化量を設定する(LargeChange,SmallChange)

スクロールバーのスクロールボックスと両端の矢印の間の部分をクリックしたときに、値がどれだけ変化するにかを設定するには LargeChange プロパティに値を設定します。また両端の矢印の部分をクリックしたときに、値がどれだけ変化するのかを設定するには SmallChange プロパティに値を設定します。

オブジェクト.LargeChange [= Long ]
オブジェクト.SmallChange [= Long ]

それぞれの場所をクリックしたときにスクロールバーの値をどれだけ変化させるのかを Long 型の整数の値で指定してください。デフォルトの値はどちらも 1 に設定されています。

スクロールバーのどの部分をクリックすると LargeChange プロパティおよび SmallChange プロパティの値の分だけ値が変化するのかについては下記を参照されてください。

スクロールバーのクリック時の変化量を設定する(LargeChange,SmallChange)(1)

具体的には次のように記述します。下記ではユーザーフォームが表示される前に発生する Initialize イベントに対するイベントプロシージャにコードを記述し、スクロールバーをクリックしたときの変化量を設定しています。またスクロールバーの初期値も設定しています。

Option Explicit

Private Sub UserForm_Initialize()
    ScrollBar1.Max = 50
    ScrollBar1.Min = 0

    ScrollBar1.LargeChange = 10
    ScrollBar1.SmallChange = 2

    ScrollBar1.Value = 0
    Label1.Caption = ScrollBar1.Value
End Sub

Private Sub ScrollBar1_Change()
    Label1.Caption = ScrollBar1.Value
End Sub

スクロールバーのクリック時の変化量を設定する(LargeChange,SmallChange)(2)

スクロールバーのクリック時の変化量を設定する(LargeChange,SmallChange)(3)

ユーザーフォームを表示すると、スクロールバーが表示されます。

スクロールバーのクリック時の変化量を設定する(LargeChange,SmallChange)(4)

スクロールバーの両端の矢印をクリックすると SmallChange プロパティに設定した 2 ずつ値が変化します。

スクロールバーのクリック時の変化量を設定する(LargeChange,SmallChange)(5)

スクロールバーのスクロールボックスと両端の矢印の間の部分をクリックすると LargeChange プロパティに設定した 10 ずつ値が変化します。

スクロールバーのクリック時の変化量を設定する(LargeChange,SmallChange)(6)

スクロールバーの向きを設定する(Orientation)

スクロールバーの垂直方向の向きにするか水平方向の向きにするか設定するには Orientation プロパティに値を設定します。

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

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

定数説明
fmOrientationAuto-1スクロールバーの幅と高さの比較で自動的に向きが決まる
fmOrientationVertical0垂直方向の向きに設定される
fmOrientationHorizontal1水平方向の向きに設定される

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

スクロールバーの向きを設定する(Orientation)(1)

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

Option Explicit

Private Sub UserForm_Initialize()
    ScrollBar1.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 = 40
    Label1.Left = 60

    ScrollBar1.Top = 80
    ScrollBar1.Left = 60
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()
    ScrollBar1.Width = 15
    ScrollBar1.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()
    ScrollBar1.ForeColor = RGB(255, 255, 255)
    ScrollBar1.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
Scroll

スクロールバーの既定のイベントは Change イベントです。

-- --

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

( Written by Tatsuo Ikura )

Profile
profile_img

著者 / TATSUO IKURA

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