In your example 100 > 21500
is True because it's a string ("ascii-betical") comparison, not a numeric one.
One wrinkle in that though...
? "100" > "21500" --> False!
? "100" >" 21500" --> True!
I'm guessing your observed result was because you had a leading space on the second value: if that wasn't the case there's no way it would evaluate to True
...
IsNumeric() doesn't check to see if a variable value is a number, just if it could safely be converted to one, so
IsNumeric("100") = True
even though "100" is a string.
If you want values pulled from to behave as numbers then the correct approach is
1) use IsNumeric() to check they can safely be converted to a numeric type then
2) use CDbl()
, CLng()
etc to convert them as @simoco suggests.