|
Listは、A列で昇順整列されて居る事とします
以下をUserFormのコードモジュールに記述して下さい
Option Explicit
'モジュールレベルの変数を宣言
'(モジュール全域から参照出来る変数)
Private rngList As Range
Private lngRows As Long
Private Sub UserForm_Initialize()
Dim i As Long
Dim vntData As Variant
'Listの基準位置を設定
Set rngList = ActiveSheet.Cells(1, "A")
With rngList
'List行数を取得
lngRows = .Offset(Rows.Count - .Row).End(xlUp).Row - .Row + 1
If lngRows >= 1 Then
'ComboBox1にA列データを無重複で登録
vntData = .Resize(lngRows + 1).Value
ComboBox1.AddItem vntData(1, 1)
For i = 2 To lngRows
If vntData(i - 1, 1) <> vntData(i, 1) Then
ComboBox1.AddItem vntData(i, 1)
End If
Next i
Else
lngRows = 0
End If
End With
End Sub
Private Sub UserForm_Terminate()
Set rngList = Nothing
End Sub
Private Sub ComboBox1_Change()
Dim i As Long
Dim vntData As Variant
Dim vntKey As Variant
'有効な選択がされた場合
If ComboBox1.ListIndex > -1 Then
'ComboBox1の値を変数に取得
vntKey = ComboBox1.Value
ListBox1.Clear
'List行数が1以上なら(Listにデータが有るなら)
If lngRows > 0 Then
'A列、B列データを配列に取得
vntData = rngList.Resize(lngRows, 2).Value
For i = 1 To lngRows
'A列の値とComboBox1の値が同じなら
If CStr(vntData(i, 1)) = vntKey Then
'ListBox1にB列データを登録
ListBox1.AddItem vntData(i, 2)
End If
Next i
End If
End If
End Sub
|
|