【ExcelVBA・マクロ】ユーザーフォームのScrollBar・SpinButtonの使い方|数値入力を補助するコントロール【コピペOK】

ExcelVBA

ユーザーフォームで数値を入力してもらう際、TextBoxだけだと「全角で入力される」「範囲外の数値が入力される」といったトラブルが起きがちです。そんなときに便利なのが、ScrollBar(スクロールバー)とSpinButton(スピンボタン)です。

この記事では、ドラッグやクリックだけで数値を安全に入力できるScrollBar・SpinButtonコントロールの配置方法から、TextBoxと連携させる実践的な使い方まで解説します。

スポンサーリンク
スポンサーリンク

ScrollBar・SpinButtonとは

どちらもマウス操作だけで数値を増減できるコントロールですが、それぞれ特徴が異なります。

  • ScrollBar:バーをドラッグしたり、両端の矢印をクリックしたりして、広い範囲の数値を素早く選択するのに向いています
  • SpinButton:上下(または左右)の矢印ボタンをクリックして、1つずつ数値を増減させるのに向いています

どちらも「最小値」「最大値」「増減幅」をあらかじめ設定できるため、TextBoxのように範囲外の値や不正な文字が入力される心配がありません。

ツールボックスへの追加方法

ScrollBarとSpinButtonは、標準のツールボックスには表示されていないことがあります。表示されていない場合は、ツールボックスを右クリックして「その他のコントロール」を選び、一覧から「Microsoft ScrollBar Control」「Microsoft SpinButton Control」にチェックを入れて追加してください。

SpinButtonとTextBoxを連携させる

SpinButtonの矢印ボタンをクリックすると、隣に配置したTextBoxの数値が増減する例です。フォームにTextBox1SpinButton1を配置し、以下のコードを記述します。

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
  • MinMaxで入力可能な範囲を制限します
  • 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の範囲の数値をドラッグで選択する例です。フォームにScrollBar1Label1(現在値の表示用)を配置します。

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のみで数値入力欄を作る場合と比べ、以下のようなメリットがあります。

  • 全角数字や余計な文字の入力を根本的に防げる
  • MinMaxで範囲外の値を入力させない
  • マウス操作だけで素早く数値を選べるため、入力の手間が減る

数量・パーセンテージ・段階的な設定値など、範囲が決まっている数値項目を扱うフォームでは特に有効です。

まとめ

ScrollBarSpinButtonを使うことで、ユーザーフォームでの数値入力をより安全かつ直感的にできます。

  • SpinButtonは1クリックずつの細かい増減、ScrollBarはドラッグでの広範囲の選択に向いている
  • MinMaxSmallChangeLargeChangeで入力範囲や増減幅を制御できる
  • TextBoxと双方向に同期させることで、直接入力とコントロール操作の両方に対応できる

既存のTextBox・ComboBox・ListBoxと組み合わせて、より使いやすい入力フォームを作成してみてください。

スポンサーリンク
スポンサーリンク
ExcelVBA
シェアする
いがぴをフォローする

コメント

タイトルとURLをコピーしました