I would advise to try the database approach for filtering and copy paste data instead of build in filter. I was struggling a lot with filtering with macro then I found this great stuff: How can I run SQL statements on a named range within an excel sheet? Once you have your recordsets, you can paste them with Range(xxyy).CopyFromRecodset method.