Here's 1 possible approach. I created a simple Userform and added a list box. The following code goes in the form's module:
Code:
Private Sub GetFilteredList(ByRef CriteriaRange As Range, ByRef ListRange As Range)
Dim r As Integer
If CriteriaRange.Rows.Count <> ListRange.Rows.Count Then
Debug.Print "The criteria and list ranges must be of equal length."
Exit Sub
End If
For r = 1 To CriteriaRange.Rows.Count
If CriteriaRange.Cells(r, 1).Value >= 10 Then
ListBox1.AddItem ListRange.Cells(r, 1).Value
End If
Next
End Sub
Private Sub UserForm_Initialize()
With Worksheets("Sheet1")
GetFilteredList .Range("A1:A18"), .Range("B1:B18")
End With
End Sub
The sub FilteredList accepts two range parameters, representing a criteria column and the resultant list column. After checking that the two range parameters passed are of equal height, it them loops through each row in the criteria column. Within the loop, I have added a simple condition, whereby if the current cell in the criteria column is >= 10, add the corresponding list column's cell value to the ListBox control.
The sub is called within the form's Initialize event, passing in a couple of ranges from Sheet1.
This is just one of many ways you could do this.
HTH