ユーザーフォームで数値を入力してもらう際、TextBoxだけだと「全角で入力される」「範囲外の数値が入力される」といったトラブルが起きがちです。そんなときに便利なのが、ScrollBar(スクロールバー)とSpinButton(スピンボタン)です。
この記事では、ドラッグやクリックだけで数値を安全に入力できるScrollBar・SpinButtonコントロールの配置方法から、TextBoxと連携させる実践的な使い方まで解説します。
ScrollBar・SpinButtonとは
どちらもマウス操作だけで数値を増減できるコントロールですが、それぞれ特徴が異なります。
- ScrollBar:バーをドラッグしたり、両端の矢印をクリックしたりして、広い範囲の数値を素早く選択するのに向いています
- SpinButton:上下(または左右)の矢印ボタンをクリックして、1つずつ数値を増減させるのに向いています
どちらも「最小値」「最大値」「増減幅」をあらかじめ設定できるため、TextBoxのように範囲外の値や不正な文字が入力される心配がありません。
ツールボックスへの追加方法
ScrollBarとSpinButtonは、標準のツールボックスには表示されていないことがあります。表示されていない場合は、ツールボックスを右クリックして「その他のコントロール」を選び、一覧から「Microsoft ScrollBar Control」「Microsoft SpinButton Control」にチェックを入れて追加してください。
SpinButtonとTextBoxを連携させる
SpinButtonの矢印ボタンをクリックすると、隣に配置したTextBoxの数値が増減する例です。フォームにTextBox1とSpinButton1を配置し、以下のコードを記述します。
Private Sub UserForm_Initialize()
With SpinButton1
.Min = 0
.Max = 100
.SmallChange = 1
.Value = 0
End With
TextBox1.Value = SpinButton1.Value
End Sub
Private Sub SpinButton1_Change()
TextBox1.Value = SpinButton1.Value
End Sub
Min・Maxで入力可能な範囲を制限しますSmallChangeはボタンを1回クリックしたときの増減幅ですSpinButton1_Changeイベントは、値が変化するたびに自動的に呼び出されます
これだけで、ボタンをクリックするたびにTextBoxへ0〜100の範囲の数値が反映されるようになります。
TextBoxを直接編集してもSpinButtonと同期させる
上記のままだと、ユーザーがTextBoxへ直接数値を入力した場合にSpinButtonの値と食い違ってしまいます。TextBox1_Changeイベントを追加し、双方向に同期させましょう。
Private Sub TextBox1_Change()
Dim inputValue As Variant
inputValue = TextBox1.Value
If IsNumeric(inputValue) Then
If inputValue >= SpinButton1.Min And inputValue <= SpinButton1.Max Then
SpinButton1.Value = CLng(inputValue)
End If
End If
End Sub
IsNumericで数値かどうかを判定し、範囲内の値であればSpinButtonの値も更新しています。数値以外の文字が入力された場合は何もしないため、エラーが発生しません。
ScrollBarで広い範囲の数値を選択する
続いて、ScrollBarを使って0〜1000の範囲の数値をドラッグで選択する例です。フォームにScrollBar1とLabel1(現在値の表示用)を配置します。
Private Sub UserForm_Initialize()
With ScrollBar1
.Min = 0
.Max = 1000
.SmallChange = 10
.LargeChange = 100
.Value = 500
End With
Label1.Caption = "現在値:" & ScrollBar1.Value
End Sub
Private Sub ScrollBar1_Change()
Label1.Caption = "現在値:" & ScrollBar1.Value
End Sub
SmallChangeは両端の矢印をクリックしたときの増減幅LargeChangeはバーの余白部分をクリックしたときの増減幅- ドラッグ中の値もリアルタイムに
ScrollBar1_Changeイベントで取得できます
セルへ値を反映するボタンを追加する
最後に、選択した数値をワークシートのセルへ反映する処理を追加します。フォームにCommandButton1を配置してください。
Private Sub CommandButton1_Click()
If TextBox1.Value = "" Then
MsgBox "数値を入力してください。", vbExclamation
Exit Sub
End If
ThisWorkbook.Worksheets("Sheet1").Range("B2").Value = CLng(TextBox1.Value)
MsgBox "セルに反映しました。", vbInformation
End Sub
TextBoxが空でないことを確認してから、CLngで数値型に変換してセルへ書き込んでいます。
ScrollBar・SpinButtonを使うメリット
TextBoxのみで数値入力欄を作る場合と比べ、以下のようなメリットがあります。
- 全角数字や余計な文字の入力を根本的に防げる
Min・Maxで範囲外の値を入力させない- マウス操作だけで素早く数値を選べるため、入力の手間が減る
数量・パーセンテージ・段階的な設定値など、範囲が決まっている数値項目を扱うフォームでは特に有効です。
まとめ
ScrollBarとSpinButtonを使うことで、ユーザーフォームでの数値入力をより安全かつ直感的にできます。
- SpinButtonは1クリックずつの細かい増減、ScrollBarはドラッグでの広範囲の選択に向いている
Min・Max・SmallChange・LargeChangeで入力範囲や増減幅を制御できる- TextBoxと双方向に同期させることで、直接入力とコントロール操作の両方に対応できる
既存のTextBox・ComboBox・ListBoxと組み合わせて、より使いやすい入力フォームを作成してみてください。


コメント