|
▼ととろ さん:
こんにちは。
>シート上にA列とB列にデータがあり、ユーザーフォーム上のコンボボックスに、A列を表示させています。
>そのコンボボックス(A列)の選択結果により、その値と同じ場合のB列の値をリストボックスに表示させたいのです。
>
> A B
> 1 1
> 2 2
> 2 3
> 2 4
> 3 5
> 4 6
上記のデータが新規ブックのSheet1というシートのA列、
B列に入力されているとします。
ユーザーフォーム(Userform1)には、
コンボボックス(Combobox1) と
リストボックス(Listbox1) をそれぞれひとつ配置してください。
Userform1のモジュールに
'============================================================
Private Myrng As Range
'============================================================
Private Sub ComboBox1_Change()
Dim crng As Range
Dim comp As Variant
Dim ans As Variant
Myrng.Cells(1).Offset(0, 2).Value = ComboBox1.Value
With ListBox1
.Clear
ans = Evaluate("transpose(if(" & Myrng.Address & _
"=sheet1!c1," & Myrng.Offset(0, 1).Address & _
",""" & Chr(&HFF) & """))")
If TypeName(ans) <> "Variant()" Then
ans = Array(ans)
End If
.List() = Filter(ans, Chr(&HFF), False)
End With
End Sub
'============================================================
Private Sub UserForm_Initialize()
Dim doc As Object
Dim crng As Range
Set doc = CreateObject("Scripting.Dictionary")
With Worksheets("sheet1")
Set Myrng = .Range("a1", .Cells(.Rows.Count, "a").End(xlUp))
For Each crng In Myrng
If Not doc.Exists(crng.Value) Then
doc.Add crng.Value, crng.Value
End If
Next
ComboBox1.List = doc.Keys
ComboBox1.ListIndex = 0
End With
End Sub
標準モジュールに
'==================================================
sub main()
userform1.show
end sub
として、mainを実行してみてください。
ユーザーフォームが表示されますから、
コンボボックスの値を代えてみてください。
選択したデータに対応したB列のデータがリストボックスに表示されます。
尚、Sheet1のセルC1をプログラムが使っていますから、
リザーブしてください
試してみてください。
これ本当は、数字ではないのですよね?
|
|