Не понимаю, как это выполнять одним действием? Там много IF, поочередно перебираются строки, постоянно сравнивается, то что взяли удаляется (не строчки, а значение ячечек). Может можно какой-то временный список для каждого потока делать и оттуда уже скопом в финальный список заносить?
И ещё...