Why was Moses angry with his officers in Numbers 31?

Because they didn't kill all of the Midianite women.

And Moses was wroth with the officers of the host, with the captains over thousands, and captains over hundreds, which came from the battle.

And Moses said unto them, Have ye saved all the women alive? Numbers 31:14-15