コントロール (Controls) はフォームの外でも使用できます。次の例では、コントロールをワークシート上で直接使用します。
ワークシート上の特定のコントロールを変更するには、「デザイナー モード」 (「Design mode」) をアクティブにする必要があることに注意してください (また、このコントロールを使用するには非アクティブにする必要があります)。
次の例を見る前に、これを見てみましょう。
ここで、セルに背景色を追加し、30 行 x 10 列の定義された領域内のスライダーの位置に基づいてセルを選択します。
画面をスクロールするための垂直スライダーのプロパティは次のとおりです。
水平スライダーは 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
これが次の例の開始点です。
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