I've been following this thread, but have been rather busy. I finally got some time to see if I could find an efficient, non-looping method. It seems that formula array is the "magic command" that Paul wondered about.
tell application "Microsoft Excel"
set usedAreas to rows of used range of active sheet whose formula array is ""
if usedAreas is not missing value then delete range (reverse of usedAreas)
end tell
Reversing the usedAreas list is necessary, because Excel deletes rows in the order listed. If not reversed, after one row is deleted, Excel recognizes that the other rows have shifted and will abort with only the first empty row deleted.
Also, if there are no empty rows, then usedAreas is defined as missing value, which must be tested for.
this is very elegant, although "formula array" seems somewhat obscure. The distinction between "missing value" for non-empty and "" for empty rows appears to me rather strange.
But as I mentioned in my mail, if time considerations come into play, this is slower than letting AppleScript do the work.
I tested the script on my old MacBook with the OP's example file, timing it with LapTime.
As it is it took about 4.5 sec. to complete, after inserting "set screen updating to false" rsp. "true" this went down to about 2 sec. on the first run, down to about 0.6 sec. on subsequent runs (I'm not quite clear when and why this happens).
Using the loop construction in AppleScript that I suggested took about 0.2 sec. without the additional clean-up of the used range. Including this clean-up took about 1.8 sec. on the first run, much longer than just emptying the rows. Again, on second runs this will go down 0.3 secs.