I do not understand you... If you don't want to use formula, why are you asking about which is better: macro or formula? If you want to enumerate / list employees from the top of the second workbook/worksheet, because you don't want to sort data on formula column, you need to use VBA code (macro).
There is nothing hard to do!
Please, see this article on msdn site:
Looping Through a Range of Cells [Excel 2003 VBA Language Reference][
^]
Example:
Option Explicit
Sub EnumEmplExpPassDate()
Dim srcWbk As Workbook, dstWbk As Workbook
Dim srcWsh As Worksheet, dstWsh As Worksheet
Dim i As Integer, j As Integer
On Error GoTo Err_EnumEmplExpPassDate
Set srcWbk = ThisWorkbook
Set dstWbk = Workbooks.Add
Set srcWsh = srcWbk.Worksheets(1)
Set dstWsh = dstWbk.Worksheets(1)
i = 2
j = 2
Do While srcWsh.Range("A" & i) <> ""
If srcWsh.Range("B" & i) = "Non" Or srcWsh.Range("B" & i) = "Exp" Then
srcWsh.Range("A" & i).Copy dstWsh.Range("A" & j)
j = j + 1
End Select
i = i + 1
Loop
Exit_EnumEmplExpPassDate:
On Error Resume Next
Set srcWbk = Nothing
Set dstWbk = Nothing
Set srcWsh = Nothing
Set dstWsh = Nothing
Exit Sub
Err_EnumEmplExpPassDate:
MsgBox Err.Number, vbExclamation, Err.Number
Resume Exit_EnumEmplExpPassDate
End Sub