The problem is that there are multiple meanings for each.
Soul usually means the “life” of a person, and in many religions it is the part that goes to heaven after a person dies.
Soul can also mean the kindness, generosity, and other positive characteristics of a person. An example is calling somebody “soulless” to say that they are mean, arrogant, and uncaring.
Spirit, when used as “a spirit” or “spirits”, often refers to the life force of a human that is still on Earth after that person has died. Some religions believe in the spirits of their ancestors.
On the negative side, a spirit could also mean a devil or demon that terrorizes the living. This definition often goes hand-in-hand with the one above.
Spirit, when used in the phrases “he has spirit” and “the spirited person”, refers to the energy and motivation of a person. This is the most common use in the Western world, since most religions have a soul rather than spirit.
In conclusion, soul and spirit are not interchangeable in a religious context. A soul refers to the life force of a living person which goes to heaven after that person dies. A spirit refers to a life force that is present on Earth after death. Spirits also include the life force of demons and other non-humans that are on Earth. These things, although spirits, do not have a soul.
In a non-religious context, both are positive comments about a person. Spirit, which is a nonspecific life force, means energy, motivation, and determination. Soul, which is strongly linked to heaven, refers to all of the positive characteristics that have to do with helping others, such as kindness, charitable, and generosity. The word “soul” has a lot of positive cannotation in areas that “spirit” does refer to. These two words usually do not overlap in their meanings.
So, in general, they are not interchangeable. When used in a secular context, they have completely different meanings and connotations, although both are positive things.