コントロール (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