Leading the quarter-final 1-0 after last week's first leg thanks to Neymar's penalty, Barca finished the job with an entertaining 5-2 win on Thursday.
Having scored against Eibar last time out, Denis Suarez put them in front in the first half.
Lionel Messi doubled the advantage with a second-half penalty to move onto 29 goals for the season, while Luis Suarez reached 20 for his campaign just after Juanmi had struck for the visitors.
Willian Jose headed in Real's second of the night, but Arda Turan and Denis Suarez's second killed off any faint hopes of a comeback in a feisty contest that saw Neymar, Luis Suarez and Carlos Vela all narrowly avoid red cards.
Eusebio Sacristan's men are only six points behind Barca in LaLiga, but their wait for a first cup final appearance since 1988 goes on.
Barca struck first in the 17th minute after Real captain Xabi Prieto wanted a foul when he was dispossessed by Samuel Umtiti, but nothing was given.
That allowed the hosts to launch a move that involved Neymar and Messi and concluded with Luis Suarez's flick releasing Denis Suarez – in as one of five changes from Luis Enrique - to produce a calm finish into the far corner.
Real attempted to respond with Raul Navas heading Vela's corner wide, while Willian Jose shot over with an acrobatic effort.
Luis Suarez produced an impressive finish for Barca at the other end, but had strayed just offside from a sublime Messi pass as Barca's advantage stayed at one.
Tempers flared just before half-time when Vela and Neymar went head-to-head after the Mexico international had fouled his opponent.
Both were perhaps fortunate to avoid a red card, with Neymar moving his head into Vela, who responded with a hand to the face.
A bad-tempered affair continued in the second half with Luis Suarez only booked after Yuri claimed he had been elbowed in the stomach.
It was a dramatic sequence that led to Barca taking full control of the tie after 55 minutes.
First, Real should have levelled on the night with a magnificent passing move that led to Jordi Alba making a goal-saving challenge and Jasper Cillessen somehow keeping out Willian Jose's follow-up.
The visitors were punished when Neymar immediately raced clear on the break and Inigo Martinez took him down from behind in the box.
Messi then found the bottom corner from spot, despite goalkeeper Geronimo Rulli guessing the right way.
Real did find the net seven minutes later, substitute Juanmi lifting a clever finish over Cillessen after racing on to Martinez's throughball.
But Barca responded within 78 seconds in a thrilling contest, Luis Suarez sliding a finish under Rulli having been sent clear by Messi.
Real threw caution to the wind and got their second when Aritz Elustondo crossed from the right and Willian Jose timed his run perfectly to thump a header past Cillessen.
But Luis Enrique's team finally settled the issue with two goals in as many minutes.
With 10 minutes to play, Arda Turan tapped in a cross from fellow substitute Aleix Vidal at the back post and Denis Suarez struck in Barca's next attack, collecting Messi's pass before rounding Rulli to secure their progression to the last four.