Your largely doing what I would do. The one thing I might do different is do an expression search.This would be better because UE's kernel would be highlighting everything we want to append into the clipboard as part of the search. This would elminate a few lines of macro code from your loop processing. In the example below, we are searching for lines containg string "asdf" (no quotes).
The macro places a blank line at end of file so we have that as an anchor. Clears clipboard, searches file in a loop, appending results into clipboard. When were done we delete that blank line we inserted. Clipboard contains what you want.
The macro itself should have a check in the macro attribute "continue if find with replace not found". This will eliminate your error dialog box at EOF.
Does this work any faster?
Find RegExp "%*asdf*^p"