Try something like this:-
Private Sub UserFilter_Change()
Dim a, e, c As Integer
Filternames.Clear
Dim Dic As Object
With Sheets("Customers")
    If optCompany = True Then
        a = .Range("B2", .Range("B" & Rows.Count).End(xlUp)).Value
    ElseIf optAddress = True Then
        a = .Range("C2", .Range("C" & Rows.Count).End(xlUp)).Value
    ElseIf optPostcode = True Then
        a = .Range("F2", .Range("F" & Rows.Count).End(xlUp)).Value
    End If

End With

Set Dic = CreateObject("Scripting.Dictionary")
    Dic.CompareMode = vbTextCompare
    For Each e In a
        c = c + 1
        If UCase(e) = UCase(UserFilter.Value) Then Dic.Item(e) = c
    Next
   
    If Dic.exists(UserFilter.Value) Then
    With Filternames
        .Clear
        .ColumnCount = 3
        .ColumnWidths = "25,50,50"
        .AddItem Sheets("Customers").Cells(Dic.Item(UserFilter.Value), 1)
        .List(.ListCount - 1, 1) = Sheets("Customers").Cells(Dic.Item(UserFilter.Value) + 1, 2)
        .List(.ListCount - 1, 2) = Sheets("Customers").Cells(Dic.Item(UserFilter.Value) + 1, 3)
   End With
   End If
End Sub
Regards Mick