In a dramatic climax to one of the tightest groups in Champions League history, Borussia Dortmund needed an 87th-minute goal at Marseille to advance at the expense of Napoli who beat Arsenal.
Dortmund, last season's beaten finalists, were on the brink of elimination and missed a series of chances against the 10-man French side until Kevin Grosskreutz scored to clinch a 2-1 win.
Instead, Dortmund won the group ahead of Arsenal, who lost 2-0 to Napoli as all three teams finished on 12 points and head-to-head tiebreakers sent the Italians out.
"What a feeling! We were almost out of the competition. This is great. We deserved it. And I didn't even hit the ball right,'' said Grosskreutz, who was born and raised in Dortmund.
Chelsea 1-0 St Bucharest
Schalke 2-0 FC Basel
Marseille 1-2 B Dortmund
Napoli 2-0 Arsenal
Atletico Madrid 2-0 FC Porto
Austria Vienna 4-1 Zenit St. Petersburg
AC Milan 0-0 Ajax
Barcelona 6 -1 Celtic
On a tense day for Italian clubs, AC Milan advanced by clinging on for a 0-0 draw at home to Ajax after captain Riccardo Montolivo was sent off in the 22nd minute.
Juventus exited in the afternoon after Galatasaray scored late to win 1-0 in atrocious weather and pitch conditions in Istanbul. The match had resumed after being abandoned in snow and hail on Tuesday evening.
Barcelona's progress was smooth and easy as Neymar scored three in a 6-1 rout of Celtic, ensuring the Spanish champions won Group H ahead of Milan to be seeded in the draw on Monday.
Schalke beat Basel 2-0 to finish runner-up behind Group E winners Chelsea, who beat last-placed Steaua Bucharest 1-0.
Germany will have four teams in the last-16 draw for the first time, and England also have their full quartet remaining. Italy have only Milan, confirming the recent slump of Serie A clubs in Europe's top competition.
Zenit St. Petersburg advanced with the worst record, stuck on just six points - six fewer than Napoli - after losing 4-1 at Austria Vienna.
However, third-placed Porto failed to take advantage, having a penalty saved in their 2-0 loss at Group G winner Atletico Madrid.
Dortmund's progress seemed under control when Polish forward Robert Lewandowski scored in the fourth minute against Marseille, who lost all their group matches.
Though Souleymane Diawara levelled with a header in the 14th, Marseille were soon reduced to 10 men when Dimitri Payet was shown a second yellow card for being adjudged to have dived in the Germans' penalty area.
Dortmund laid siege to the home goal in the second half but Lewandowski missed an open goal, putting his shot into side netting after rounding goalkeeper Steve Mandanda.
Marco Reus, who had earlier struck the post, shot over from six metres and Lewandowski was denied a penalty claim in the 85th when bundled to the ground by Mandanda.
When Grosskreutz scored, Napoli then led Arsenal through Gonzalo Higuain's 73rd-minute goal but needed to win by three goals. Despite Arsenal midfielder Mikel Arteta being sent off in the 75th, Napoli added only a second from Jose Callejon in stoppage time to complete one of the unluckiest group-stage exits since the Champions League format was created in 1992.
In Monday's draw, seeded teams cannot play a team from their own country or the team they already played in the group.
Manchester United, Real Madrid, Paris Saint-Germain, Bayern Munich, Chelsea, Borussia Dortmund, Atletico Madrid, Barcelona.
Bayer Leverkusen, Galatasaray, Olympiakos, Manchester City, Schalke, Arsenal, Zenit St. Petersburg, AC Milan.