Manchester United needed an extra-time goal from Marcus Rashford to beat Anderlecht 2-1 and go through 3-2 on aggregate while a 1-1 draw away to Racing Genk was enough to give Celta a 4-3 aggregate win.
Four-time European champions Ajax, leading 2-0 from the first leg, appeared to be on the way out as Schalke wiped out the deficit in just under an hour and then scored again early in extra-time.
Yet, despite having Joel Veltman sent off in the 80th minute, Ajax replied with a scrambled goal from Nick Viergever and a clinical effort from Amin Younes in the last 10 minutes of extra-time to bring it back to 3-2 and win 4-3 on aggregate.
Schalke's defeat, following Bayern Munich and Borussia Dortmund's elimination from the Champions League this week, meant that there were no German semifinalists in either of the European competitions for the first time since 2004-05.