|
今晩は。
>ユーザーフォームにリストボックスとコンボボックスをつくりコンボボックスの文字列と同じ文字列を含む行をリストボックスに表示させたいのですが・・・
>ABCDEFGHIと9列あり行は600行以上あります。そしてGHIの3列のどれかに同じ
>文字列を含む(コンボ値と)行を検索してリストボックスに表示させたいのですが何かいいVBAはありますか?お願いします
検索した行のどの列をリストボックスに表示するのか不明だったので、
仮にA列を表示するようにしています。
A G H I
1 s1 a1 a1 c1
2 s2 a2 b2 c2
3 s3 a3 b3 c3
A〜GHI列にのようなデータが入っているとして動作確認しています。
Private Sub UserForm_Initialize()
ComboBox1.List = Array("a", "b", "c") 'ComboBox1に表示する値をセット
ComboBox1.ListIndex = 0
End Sub
Private Sub ComboBox1_Change()
Dim rng As Range, r As Range, rn As Range
Dim vnt As Variant
Dim dic As Object
Dim Chek As String
Dim clmn As String
clmn = "A" 'A列をListBox1に表示する場合。他の列を表示する場合は変更してください
'
Set rng = Sheets("Sheet1").Range("G1", Sheets("Sheet1").Range("G65536").End(xlUp))
Set dic = CreateObject("Scripting.Dictionary")
'
For Each rn In rng.Cells
Chek = ""
For Each r In rn.Resize(1, 3)
If r.Text Like ("*" & ComboBox1.Value & "*") Then
If dic.exists(ComboBox1.Value) Then
If Chek = Cells(r.Row, clmn).Text Then Exit For
vnt = dic(ComboBox1.Value)
ReDim Preserve vnt(UBound(vnt) + 1)
vnt(UBound(vnt)) = Cells(r.Row, clmn).Text
dic(ComboBox1.Value) = vnt
Else
ReDim vnt(0 To 0)
vnt(0) = Cells(r.Row, clmn).Text
dic(ComboBox1.Value) = vnt
Chek = Cells(r.Row, clmn).Text
End If
End If
Next
Next
'
ListBox1.List = dic(ComboBox1.Value)
'
Set dic = Nothing
Set r = Nothing
Set rng = Nothing
End Sub
|
|