特定の列の重複を除いた値をコンボボックスに表示する|Excel VBA |
アクティブシートの特定の列の値を、重複を除いてコンボボックスに表示します。
ただし、AdvancedFilterメソッドを使用しているので、データにはタイトル行が必要です。
リストボックスにも応用できます。
Private Sub UserForm_Initialize()
Dim ws As Worksheet
Dim c As Range
Set ws = Worksheets("Data")
'フィルタオプションで重複なしのデータを抽出する
ws.UsedRange.Columns(1).AdvancedFilter _
Action:=xlFilterInPlace, Unique:=True
With ComboBox1
'抽出したデータをコンボボックスのリストに追加する
For Each c In ws.UsedRange.Columns(1) _
. SpecialCells(xlCellTypeVisible) '---(1)
.AddItem c.Value
Next c
.ListIndex = 0
End With
'フィルタを元に戻す
ws.ShowAllData
End Sub
●補足●
タイトル行をコンボボックスに表示したくない場合は、(1)のコードを次のようにしてください。
For Each c In ws.UsedRange. _
Resize(ws.UsedRange.Rows.Count - 1).Offset(1, 0).Columns(1) _
.SpecialCells(xlCellTypeVisible)