Indeed, in fact there's an application note / booklet from Microchip called Tips & Tricks where they show how to use ADC and resistors to detect one button press of out many.
Here's the link to the PDF document, it's ~ 6 MB:
http://ww1.microchip.com/downloads/en/devicedoc/01146b.pdfYou'll just have to keep in mind that the ADC isn't instant, and you may want to take 2-3 adc measurements and average or something like that. Should still be able to measure once every few ms or so. It can also be a pain in the ass to use so many resistors (and you should use 1% tolerance )

Another idea would be to have a small micro with a bunch of pins, and use 8 as inputs and 4 or more pins as output to send power to buttons through some resistors (to limit current) .... only send power to one row of buttons at a time and you detect if buttons on that row are pressed or not by reading the input pins
Your micro outputs on RA0, waits a few microseconds and reads PORTB and gets the state of all 8 buttons on first row. Store this in memory. Turn output off on RA0 , turn on output on RA1 .. wait a bit, read port , store second row of buttons in another variable... go through all 4 rows, and you have the 32 button states with just 12 io pins
You'll need a couple of other pins for I2C or SPI ... so a 16 pin microcontroller in theory would be enough.
