Harmison was sent home from Bangladesh last month after straining his back and missed the second Test.
"He bowled at the National Academy a week ago and he was sore for a few days afterwards," Peter Gregory, the ECB's chief medical officer, said in a statement. "Then he returned for a fitness test on Monday and, when bowling his second spell in the nets, it was clear that he could not continue."
Seamer Richard Johnson will replace Harmison in the squad for the three-Test series, with the first match due to start in Galle on December 2.