Lionel Messi stole the headlines once again, with two penalties in the first half either side of an Antonio Nocerino strike, bringing him up to 14 Champions League goals for the season, a record for a single campaign.
Andres Iniesta sealed the victory early in the second half, as the home side progressed to the last four for a record fifth straight year at the expense of the Italian champions, who will be left feeling aggrieved after some refereeing decisions did not go their way.
With a 0-0 result from the first leg under their belts, Milan knew that a score draw would be enough to take them through. Barca coach Pep Guardiola had already suggested that a Rossoneri goal was inevitable, and clearly set up to counter such an eventuality, with his side, and Messi in particular, dictating the opening exchanges.
A blistering counterattack after only four minutes saw the Barca forward glide into the penalty area in the blink of an eye, but his finish was put straight into the grateful arms of Christian Abbiati.
Moments later and Messi was at it again, this time poking the wrong side of the post after being put clean through by a beautiful piece of combination play from Cesc Fabregas and Dani Alves.
The Argentine sprinted clear of the Milan back line once more in the 11th minute, but initially appeared to waste the chance with a square pass to Xavi. However, the ball was soon back at his feet, and Luca Antonini, so assured in the first leg, slid in far too rashly, conceding a penalty.
Messi himself stepped up to take the spot-kick and made no mistake, beating Abbiati with a low shot into the left corner to score a record 13th Champions League goal of the season and 50th of his career.
The Rossoneri were nowhere to be found, and with Guardiola’s men dominating possession and looking eminently at ease, the tie seemed to be heading to an inevitable conclusion.
However, out of nowhere, Milan were level just after half an hour. Robinho found Zlatan Ibrahimovic at the top of the box, who in turn slid in the unmarked Nocerino on the left for a low finish past Victor Valdes to put the visitors ahead on aggregate.
Milan were heading through as things stood thanks to their away goal, but could only hold onto their advantage for nine minutes. From a corner, a tug on the shirt of Sergio Busquets by Alessandro Nesta was spotted, and referee Bjorn Kuipers awarded Barca another penalty, much to the chagrin of the Rossoneri players, who protested vehemently to the match official.
Messi steadied himself once more from the spot, this time sending the ball into the right corner to put the home side back in front with a 2-1 aggregate lead at the end of the first half.
Despite a promising start to the second period from Milan, the Catalans were able to increase their advantage within eight minutes of the restart. Iniesta was perhaps fortunate to see a block by Philippe Mexes loop into his path, but did not hesitate, and stroked home from six yards out.
The Rossoneri were floored by the goal, with Barca playing comfortably on the back of a two-goal cushion. They nearly added another just past the hour mark, as Messi played in substitute Thiago Alcantara for a shot that was dragged just wide.
At this point, the sting was well and truly taken out of the game, with the fans inside Camp Nou already looking forward to a place in the last four. Further half-chances for Adriano and Messi were foiled, but it mattered little as the home side ran out comfortable winners in the end.
Barca now advance to their fifth consecutive Champions League semi-final, a tournament record, and will face the winner of the Chelsea-Benfica tie, with the first leg set for April 18.