John Guidetti, who spent last season on loan at Celtic, put Sweden ahead in the 23rd minute from the penalty spot before setting up Simon Tibbling to make it 2-0 three minutes later.
Denmark put the Swedes under pressure in the second half and Uffe Bech narrowed the lead on 63 minutes.
But Sweden held out and secured victory as substitute Robin Quaison made it 3-1 seven minutes from time and Oscar Hiljemark netted a fourth deep into injury-time.
The final on Tuesday will be Sweden’s first since 1992, when they won the tournament.
After Portugal crushed Germany 5-0 earlier in the evening, Denmark edged the early play of the second semi-final and looked to have opened the scoring after 11 minutes, with Bech’s corner turned in at the near post by Yussuf Poulsen – an effort ruled out for handball.
Jannik Vestergaard dragged wide as the Danes pushed, only to be hit by a sucker punch after Alexander Scholz was adjudged to have bundled over Isaac Kiese Thelin, Guidetti sending Jakob Busk the wrong way with the resulting penalty.
Within three minutes things got even worse for Denmark as Kiese Thelin played in Guidetti, whose selfless pass to Tibbling was fired home.
Unsurprisingly, Sweden sat deep after taking the lead and welcomed Denmark on as half-time approached.
When play resumed there could have been a third had Kiese Thelin latched on to a Oscar Lewicki header across, although Denmark grew into the game as the half progressed.
They reduced the deficit in the 63rd minute when Bech flicked past Patrik Carlgren, while Vestergaard and Jonas Knudsen had efforts to draw level.
However, Sweden ended strongly and, shortly after Abdullah Khalili came close, substitute Quaison drove home seven minutes from time to settle the nerves.
Things got even worse for Denmark in stoppage time as captain Hiljemark wrapped up victory with an impressive strike across the face of goal.