HOME > 即効テクニック > Excel VBA > ユーザーフォーム関連のテクニック > 特定の列の重複を除いた値をコンボボックスに表示する

特定の列の重複を除いた値をコンボボックスに表示する|Excel VBA

ユーザーフォーム関連のテクニック

特定の列の重複を除いた値をコンボボックスに表示する

(Excel 2000/2002/2003/2007/2010)

アクティブシートの特定の列の値を、重複を除いてコンボボックスに表示します。
ただし、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)