It's really easy to find it with CheatEngine.
First set the range of the search between 15 B0 00 00 and 15 CF FF FF (i never got it elsewhere)
After as, i said, the value can only be between 0 and 1000, not less, not more.
So, when the bar is empty, Morale is likely at 0 and when the bar is full, Morale is likely at 1000.
So look at the bar and you can make a guess on the value, for example, between 0 and 400 (as we usually start a battle with low Morale, it's a good range.
Then kill an hostile union, the bar should be filling up a bit, so alt tab before to get attacked and this time, search with "Increased value", go back in the game, when an hostile union hit you, the bar should go down, so alt tab again, search for "Decreased value" and you already should have much less results.
if there are still too many results, don't come back in game after to have done the "Decrease value" search, make an "Unchanged value" search, you can do it many time until the results found don't go down anymore.
After, according to the bar, you could do a new range search, for example, between 100 and 500.
You can go back in game, get hit again to let the bar down or kill another union to get it up.
It usually take me less than 2 turns to find the correct address, even often less than 1 turn.
Keep in mind that the value is between 0 and 1000, and that if the bar is half full, the value is about 500 (so between 400-600)
Personally i always found the union morale address between 15 7A 00 00 and 15 7A FF FF, you could try with this range, and you certainly will find it there too.
I gave the larger range above just "to be sure", in case it would be different for you but i doubt so as we are supposed to have the same game.
If you think you found it, change the value to 1000 and go back in game, the bar won't fill up immediately, you got to be hit or kill something to get it to 1000.