TOP

VBA-レッスン 12.3。コントロール (Controls)

コントロール (Controls) はフォームの外でも使用できます。次の例では、コントロールをワークシート上で直接使用します。

ワークシート上の特定のコントロールを変更するには、「デザイナー モード」 (「Design mode」) をアクティブにする必要があることに注意してください (また、このコントロールを使用するには非アクティブにする必要があります)。


スクロールバー (スクロールバー)

次の例を見る前に、これを見てみましょう。

ここで、セルに背景色を追加し、30 行 x 10 列の定義された領域内のスライダーの位置に基づいてセルを選択します。

画面をスクロールするための垂直スライダーのプロパティは次のとおりです。

  • Min : 1
  • Max : 30 (30 行)
  • Value : スライダーの位置 (この場合、1 ~ 30)
  • 水平スライダーは Max : 10 を除いて同じです。

    以下は、垂直スライダー (Value) の値が変更されるたびに実行されるコードです。

     'セル内の灰色の背景
     Cells.Interior.Color = RGB(240, 240, 240)
    
     '色を適用してセルを選択します
     With Cells(ScrollBar_vertical.Value, ActiveCell.Column) '値 (Value) を使用してセルを定義します。
         .Interior.Color = RGB(255, 220, 100) 'オレンジ色を使用しております
         .Select 'セルを選択します
     End With
    

    このコードは、Change イベントと Scroll イベントが発生するとトリガーされ、スライダーのどの部分をクリックしたかに関係なく命令を実行します。

    以下は垂直スライダーのコードです。

    Private Sub vertical_bar()
         'セルに灰色の背景を適用する
         Cells.Interior.Color = RGB(240, 240, 240)
         
         '背景を適用し、セルを選択します
         With Cells(ScrollBar_vertical.Value, ActiveCell.Column)
             .Interior.Color = RGB(255, 220, 100) 'オレンジ
             .Select 'セルを選択します
         End With
    End Sub
    
    Private Sub ScrollBar_vertical_Change()
         vertical_bar
    End Sub
    
    Private Sub ScrollBar_vertical_Scroll()
         vertical_bar
    End Sub
    

    次に、水平スライダーのコードを次に示します。

    Private Sub horizontal_bar()
         'セルに灰色の背景を適用する
         Cells.Interior.Color = RGB(240, 240, 240)
    
         '背景を適用し、セルを選択します
         With Cells(ActiveCell.Row, ScrollBar_horizontal.Value)
             .Interior.Color = RGB(255, 220, 100) 'オレンジ
             .Select 'セルを選択します
         End With
    End Sub
    
    Private Sub ScrollBar_horizontal_Change()
         horizontal_bar
    End Sub
    
    Private Sub ScrollBar_horizontal_Scroll()
         horizontal_bar
    End Sub
    

    ドロップダウンとリストボックス (ComboBox と ListBox)

    これが次の例の開始点です。

    Excel サンプル ファイルをダウンロードできます: userform4.xls

    フォームを実行するときに、(AddItem メソッドを使用して) 4 か国をドロップダウン リストに読み込むようにします。

    Private Sub UserForm_Initialize()
         For i = 1 To 4 '=> 4か国を満たす
            ComboBox_Country.AddItem Cells(1, i) 'ループを使用してA1からA4までのセルの値を加算します
        Next
    End Sub
    

    ドロップダウンの値が変更されたら、前のループと同様のループを使用して、選択した国の都市を追加します。

    これを行うには、列の番号と、この列内の都市 (行) の数を知る必要があります。

    ListIndex プロパティには、ドロップダウン リストで選択した項目のシーケンス番号が含まれます (リスト項目の値が含まれる Value とは異なります)。 ListIndex は数値 0 で始まることに注意してください。

    列番号は次のように取得されます。

    column_number = ComboBox_Country.ListIndex + 1
    

    特定の国について選択した列の行数を取得するには、空ではない最後のセルの番号を見つけることができます。

    rows_number = Cells(1, column_number).End(xlDown).Row
    

    この情報を使用して、都市をリストに追加するループを作成できるようになりました。

    Private Sub ComboBox_Country_Change()
         'リストをクリアする (そうしないと、都市はすぐに追加されます)
         ListBox_Cities.Clear
         
         Dim column_number As Integer, rows_number As Integer
         
         '選択した要素のシーケンス番号 (ListIndex は 0 から始まります):
         column_number = ComboBox_Country.ListIndex + 1
         '選択した列の国を含む行の数:
         rows_number = Cells(1, column_number).End(xlDown).Row
    
         For i = 2 To rows_number '=> リストに都市を入力します
            ListBox_Cities.AddItem Cells(i, column_number)
         Next
    End Sub
    

    注: コードを短くすることもできますが、読みにくくなります。

    Private Sub ComboBox_Country_Change()
         ListBox_Cities.Clear
         For i = 2 To Cells(1, ComboBox_Country.ListIndex + 1).End(xlDown).Row
             ListBox_Cities.AddItem Cells(i, ComboBox_Country.ListIndex + 1)
         Next
    End Sub
    

    選択した都市は「選択」テキストフィールド (「Choice」) に入力されます。

    Private Sub ListBox_Cities_Click()
         TextBox_Choice.Value = ListBox_Cities.Value
    End Sub
    

    完成した例は、Excel ファイルで確認できます: userform4b.xls