|
皆さん今晩は。
Hirofumi さんがすでに別解を提示されていますが、これで試してみてください。
行表示にともない、かなりコードを見直しています。
重複して、行を表示しないよう工夫しています。
>すみません表示列はA〜Gです。リストボックスの表示は複数行です。
Private dic As Object
Private Sub UserForm_Initialize()
Dim rng As Range, r As Range, rn As Range
Dim vnt As Variant, v, cmbList
Dim dicChk As Object
'
cmbList = Array("a", "b", "c") 'ComboBox1に表示する値をセット
With Sheets("Sheet1")
Set rng = .Range("G1", .Range("G65536").End(xlUp))
End With
'
Set dic = CreateObject("Scripting.Dictionary")
Set dicChk = CreateObject("Scripting.Dictionary")
'
For Each v In cmbList
For Each rn In rng.Cells
For Each r In rn.Resize(1, 3)
If r.Text Like ("*" & v & "*") Then
If dic.exists(v) Then
If dicChk.exists(r.Row & v) Then Exit For
vnt = dic(v)
ReDim Preserve vnt(UBound(vnt) + 1)
vnt(UBound(vnt)) = Cells(r.Row, 1).Resize(1, 7).Value
Else
ReDim vnt(0 To 0)
vnt(0) = Cells(r.Row, 1).Resize(1, 7).Value
End If
dic(v) = vnt
dicChk(r.Row & v) = ""
End If
Next
Next
Next
'
ComboBox1.List = cmbList
ComboBox1.ListIndex = 0
'
ListBox1.ColumnCount = 7 'ListBox1の列は7列にする
'
Set dicChk = Nothing
Set rng = Nothing
End Sub
Private Sub ComboBox1_Change()
ListBox1.List = Application.Transpose(Application. _
Transpose(dic(ComboBox1.Value)))
End Sub
Private Sub UserForm_Terminate()
Set dic = Nothing
End Sub
|
|