Hi Robert,
If the Data-Filter option is not appropriate, here is a brief example of the code required for extracting data from an Excel database:
Range("database"

.AdvancedFilter Action:=xlFilterCopy, _
CriteriaRange:="criteria", _
CopyToRange:=Range("ext_out"

, _
'Note:"ext_out" is an 'output' range on a separate sheet
Unique:=False
A couple of notes:
1) The names in quotes (e.g. "database"

are arbitrary "Range Names" which you can freely assign - by using Control <F3> and specifying the range.
2) The output range can be on any sheet, providing that the range name is UNIQUE to the workbook. Excel allows for more than one instance of the same range name. (Excel should NOT allow for more than one identical name, but it does.) The first identical range name created (of two or more) by default becomes the "global" workbook range name, whereas any additional identical range names are only "sheet" names