教えて!ExcelVBA!

ExcelVBAの基礎知識・書き方について紹介します。

【ExcelVBA フォーム&コントロール】スピンボタンをクリックした時に指定した範囲内のデータのみ表示する方法を教えて!

構文

構文は以下の通りです。

スピンボタン名.Min = 値1 ' 最小値
スピンボタン名.Max = 値2 ' 最大値
スピンボタン名.SmallChange = 値3 ' 値の変化量

解説

スピンボタンの最大値および最小値を設定するには、MaxプロパティおよびMinプロパティを使用します。スピンボタンの矢印ボタンをクリックした時に増減させる値の幅を設定するには、SmallChangeプロパティを使用します。値1にはスピンボタンの最小値を、値2には最大値を、値3には増減値を設定します。

使い方

具体的な使い方を紹介します。

Private Sub UserForm_Initialize()
    ' スピンボタンの初期設定
    SpinButton1.Min = 1 ' 最小値
    SpinButton1.Max = 100 ' 最大値
    SpinButton1.SmallChange = 1 ' 値の変化量
End Sub

上記は、Initializeイベントプロシージャを使用して、スピンボタンの基本的なプロパティを設定する内容です。これには、最小値(Min)、最大値(Max)、値の変化量(SmallChange)が含まれます。これらを適切に設定することで、スピンボタンが指定された範囲内で動作するようになります。

プログラミング例

以下に、プログラミング例を紹介します。

Private Sub UserForm_Initialize()
    ' スピンボタンの初期設定
    SpinButton1.Min = 0 ' 最小値
    SpinButton1.Max = 100 ' 最大値
    SpinButton1.SmallChange = 5 ' 値の変化量
    ' データ表示の初期化
    DisplayAllData
End Sub

Private Sub SpinButton1_Change()
    ' スピンボタンが変更された時の処理
    FilterData
End Sub

Sub DisplayAllData()
    ' フィルタリング解除
    On Error Resume Next
    ActiveSheet.ShowAllData
    On Error GoTo 0
End Sub

Sub FilterData()
    Dim ws As Worksheet
    Set ws = ThisWorkbook.Sheets("Sheet1") ' シート名を適切なものに変更
    Dim targetColumn As Range
    Set targetColumn = ws.Range("B:B") ' 点数が入力されている列を指定
    ' 現在のスピンボタンの値を取得
    Dim filterValue As Integer
    filterValue = SpinButton1.Value
    ' フィルタリングを解除
    DisplayAllData
    ' 指定された値以下のデータのみ表示
    targetColumn.AutoFilter Field:=1, Criteria1:=">=" & filterValue
End Sub

上記の例では、特定のシート("Sheet1")に格納された生徒の成績データを想定しています。成績データはA列に生徒の名前、B列に点数が入力されていると仮定します。初期表示時には全てのデータを表示し、スピンボタンの値が変更されると指定した点数以下の生徒のみを表示するようになっています。

まとめ

スピンボタンの変化量や最小値・最大値は簡単に変更可能ですので、具体的な要件に合わせて調整してみてください。