His 110 means he has scored 323 runs in a week after an unbeaten 93 against Glamorgan in the One-Day Cup and 120 not out against Kent in the T20 Blast.
Tim Murtagh (2-85) reduced Surrey to 23-2 inside the first six overs, before Rory Burns (88) aided the recovery.
Burns and Roy put on a 118-run fourth wicket stand as Surrey closed on 384-8.
Roy's century was a fine retort against Division One leaders Middlesex, who dismissed the England limited-overs opener for a first-ball duck in the One-Day Cup on Tuesday.
After paceman Murtagh removed both Zafar Ansari and Dominic Sibley early on, Surrey's slump continued as James Franklin trapped Aaron Finch (37) to leave them 70-3.
Burns helped turn their fortunes around as he hit 15 fours in his 127-ball knock as the visitors seized the initiative.
Roy hit 16 fours himself as Surrey edged close to the 400 mark by the end of the first day's play, with Ben Foakes unbeaten on 53.
Jason Roy continued his fine form with a second century in six days as Surrey made a strong start with the bat against Middlesex at Lord's.