Schwartzel completed three rounds at 14-under-par 199. He owned the 54-hole lead for the second time in his tour career and will go for his third tour title on Sunday.
Ricardo Gonzalez fired a 9-under 62 to jump into second place at 13-under-par 200. His 62 would have matched the course record, but preferred lies rules were in effect due to wet course conditions.
Pablo Larrazabal also fired a 62 to take third at minus-11. Paul Waring (67), Carlos Del Moral (67) and Andrew Tampion (65) are one shot back at 10-under-par 203.
Schwartzel pushed his way through the third round despite feeling ill again. He contemplated withdrawing in the second round, but kept playing and it was a wise choice.
'I wasn't feeling very strong this morning,' Schwartzel said afterwards.
The 24-year-old opened with three straight pars before converting birdie chances on the fourth and fifth at Club de Campo Villa de Madrid.
Schwartzel ran home an eagle putt from just over 20 feet at the seventh to jump to 13 under, where he led Larrazabal by three.
The South African came back with a 7-footer for birdie at the eighth, but gave that shot right back as he three-putted for bogey on the ninth.
Schwartzel continued to struggle around the turn. After a pair of two-putt pars, he knocked his drive into the trees left of the fairway.
His ball came to rest against a branch that was lying on the ground. He pitched his ball forward some 20 yards, then knocked his third onto the green.
Schwartzel two-putted for bogey and was suddenly just one clear of Larrazabal and Gonzalez at 13 under. As he parred the next, Gonzalez joined him in the lead.
Gonzalez posted eight pars and one birdie on the front nine. But the back nine was a completely different story.
The Argentine birdied three of the first four holes to jump to minus-8. After an eagle at the 14th, Gonzalez birdied 15 and 16 grab a piece of the lead.
Gonzalez rolled in a six-foot birdie putt at the last to take the lead away from Schwartzel.
However, Schwartzel two-putted for birdie from the fringe at the 14th to regain a piece of the lead. He parred three straight, then closed with an 8-foot birdie putt at the last to secure his second 54-hole lead on the European Tour.
'I'm feeling a little better now. I thought I grinded out there nicely today,' admitted Schwartzel. 'I could have gone either way this morning. I felt really weak, but I felt like I hit it pretty solid.'