By way of an update, I did some testing yesterday and I believe the memory issue lies in the application.match loop and its use of Range objects. The solution I think is to use an array of data and loop through it (match does not seem to like arrays with long text in them, which you have). It will be slower but use far less memory. My initial tests were around 30minutes but I have not verified the data as yet because I had made numerous other changes first.