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
プロパティで取得または設定することができます。
オブジェクト.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 つのイベントプロシージャを記述しました。
ユーザーフォームを表示したあと、スクロールバーの両端にある矢印をクリックしたり、スクロールバーの中にあるスクロールボックスをドラッグして動かしてみてください。スクロールバーの値が変化し、その値がラベルに表示されます。
このようにスクロールバーを使用することで値を直接入力する代わりに、スクロールバーを動かすことで値を変化させることができます。
スクロールバーの最大値と最小値を設定する(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
ユーザーフォームを表示すると、スクロールバーが表示されます。最小値が -50 で最大値を 50 に設定してあり、初期値を 0 に設定しているため、スクロールボックスはちょうど中間あたりに表示されています。
スクロールボックスを一番右まで移動すると最大値に設定した値となります。
スクロールボックスを一番左まで移動すると最小値に設定した値となります。
スクロールバーのクリック時の変化量を設定する(LargeChange,SmallChange)
スクロールバーのスクロールボックスと両端の矢印の間の部分をクリックしたときに、値がどれだけ変化するにかを設定するには LargeChange
プロパティに値を設定します。また両端の矢印の部分をクリックしたときに、値がどれだけ変化するのかを設定するには SmallChange
プロパティに値を設定します。
オブジェクト.LargeChange [= Long ] オブジェクト.SmallChange [= Long ]
それぞれの場所をクリックしたときにスクロールバーの値をどれだけ変化させるのかを Long
型の整数の値で指定してください。デフォルトの値はどちらも 1 に設定されています。
スクロールバーのどの部分をクリックすると LargeChange
プロパティおよび SmallChange
プロパティの値の分だけ値が変化するのかについては下記を参照されてください。
具体的には次のように記述します。下記ではユーザーフォームが表示される前に発生する 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
ユーザーフォームを表示すると、スクロールバーが表示されます。
スクロールバーの両端の矢印をクリックすると SmallChange
プロパティに設定した 2 ずつ値が変化します。
スクロールバーのスクロールボックスと両端の矢印の間の部分をクリックすると LargeChange
プロパティに設定した 10 ずつ値が変化します。
スクロールバーの向きを設定する(Orientation)
スクロールバーの垂直方向の向きにするか水平方向の向きにするか設定するには Orientation
プロパティに値を設定します。
オブジェクト.Orientation [= fmOrientation ]
設定可能な値は次の通りです。
定数 | 値 | 説明 |
---|---|---|
fmOrientationAuto | -1 | スクロールバーの幅と高さの比較で自動的に向きが決まる |
fmOrientationVertical | 0 | 垂直方向の向きに設定される |
fmOrientationHorizontal | 1 | 水平方向の向きに設定される |
デフォルトの値は fmOrientationAuto
となっておりコントロールを設置したときの幅と高さで向きが決まります。幅の方が高さよりも大きければ水平方向、高さの方が幅よりも大きければ垂直方向となります。幅と高さの比較に関係なく向きを設定したい場合に fmOrientationVertical
または fmOrientationHorizontal
を設定されてください。
具体的には次のように記述します。下記ではユーザーフォームが表示される前に発生する Initialize
イベントに対するイベントプロシージャにコードを記述し、スクロールバーの向きを固定で垂直方向に設定しています。
Option Explicit Private Sub UserForm_Initialize() ScrollBar1.Orientation = fmOrientationVertical End Sub
ユーザーフォームを表示すると、スクロールバーの幅の方が高さよりも大きいにも関わらずスクロールバーの向きが垂直方向になっています。
スクロールバーの表示位置を設定する(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
ユーザーフォームを表示すると、表示されたスクロールバーが指定した位置で表示されているのが確認できます。
スクロールバーの幅と高さを設定する(Width,Height)
スクロールバーの幅と高さを設定するには幅については Width
プロパティ、高さについては Height
プロパティに値を設定します。
オブジェクト.Width [= Single ] オブジェクト.Height [= Single ]
幅および高さをあらわす単精度浮動小数点型の数値を代入してください。単位はポイントです。
具体的には次のように記述します。下記ではユーザーフォームが表示される前に発生する Initialize
イベントに対するイベントプロシージャにコードを記述し、スクロールバーの幅と高さを設定しています。
Option Explicit Private Sub UserForm_Initialize() ScrollBar1.Width = 15 ScrollBar1.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() ScrollBar1.ForeColor = RGB(255, 255, 255) ScrollBar1.BackColor = RGB(0, 74, 127) End Sub
ユーザーフォームを表示すると、表示されたスクロールバーの文字色および背景色の設定が行われているのが確認できます。(スクロールバーのスクロールボックスと矢印の間の部分の色は、設定した背景色から自動的に色が決まるようです)。
スクロールバーのイベント一覧
スクロールバーで発生するイベント一覧は次の通りです。
AfterUpdate BeforeDragOver BeforeDropOrPaste BeforeUpdate Change Enter Error Exit KeyDown KeyPress KeyUp Scroll
スクロールバーの既定のイベントは Change
イベントです。
-- --
Excel のユーザーフォームで設置できるスクロールバーを VBA から使用する方法と、スクロールバーで設定可能なプロパティおよびイベントの一覧について解説しました。
( Written by Tatsuo Ikura )
著者 / TATSUO IKURA
これから IT 関連の知識を学ばれる方を対象に、色々な言語でのプログラミング方法や関連する技術、開発環境構築などに関する解説サイトを運営しています。