You can also sort the source sheet on the filter columns so that you end up with as few discrete areas as possible when filtering, then loop through the areas of the visible cells, load each area into an array and then iterate that populating your master array.