I can suggest you an optimization that may automate the process a little more.
How about instead of using a procedure to generate 3 fixed lists, you use the before.picking event to generate just one temporary list with the names that start with the letters between the first character and the last one of the first selection?
It's just an idea, I'll try to show you the blocks later. I'm on my phone right now.
Lots of variables including an alphabet list
The init and gotText fetching the external list of names (first and surname in each cell), calling three procedures and displaying various outputs
In this procedure i get the first letters for each name, and then count the number of letters, and get those counts into a list, that corresponds with the alphabet list