Function to get constants of range
I like the use of Intersect to handle single cell ranges.  

You should avoid using Cells as variable name because it could easily be confused with the built in Cells collection.  By contrast Range As Range could be used because there is no default Range value.  Personally, I use Source and Target to name my ranges.  rSource and **rTarget would generally be considered better names but I think that the context in which they are used is descriptive enough.

The use of an Error Handler here is just fluff.  All it does is just throw the same error that would be thrown without it.  You should use Error Handlers to clean up the objects and reset the "Application State" when something goes wrong.

I don't see any issues with any "Edge Cases".  Raising the Error, however, does severely limit the possible "Use Cases".  The way it is written you can not test a series of ranges for constant values because it will throw an error.  IMO, it would be more useful to have the function escape the error and return Nothing.  In this way, you can create a customized Error Handler at the point of use.  For example: If not GetConstants(rngA) is Nothing Then ... If not GetConstants(rngB) is Nothing ....