Intermittent problem reading many buttons on one analog read.

The hardware setup is more complicated than necessary.

For the software, I would do some thing like this:

Key = readadc();
If (key > key1_threshold) return 1;
If (key > key2_threshold) return 2;
If (key > key3_threshold) return 3;
...

Where the threshold goes from the highest to the lowest ( key1_threshold > key2_threshold > key3_threshold ...).

For your application, you can simply use a switch / case structure to process it.