In other words, once a condition is met, the following ELSEIF's are not checked. You have to be careful, of course, that an earlier condition doesn't match a later one. With SELECT CASE you are absolutely certain since you spell out number ranges which don't match any other CASE's, regardless of where they are.
As far as your problem is concerned, it could be any number of things. In debugging my own code, I've learned that it isn't always an obvious thing -- sometimes it's just a minor oversight, or a typo or a < where it should have been a >. You'll just have to keep checking. Printing out values at various points is a good idea (I noticed you've been doing that). Try simple things like over-sizing your array to see if the problem clears up, etc..
Anyway, good luck!