Не совсем автоматизировано но список листов можно получать так:
Заводим макросом функцию:
Function SheetName(SheetNumber As Integer) As String
SheetName = Worksheets(SheetNumber).Name
End Function
Далее если в любой ячейке написать =SheetName(Порядковый номер листа) (можно ссылаться на ячейку) то в ячейку вернется имя нужного листа (нумерация идет по логике - самый левый лист документа = 1
Для списка полей нужно использовать именнованные диапазоны со смещением (
пример тут)
Ну а дальше ВПР в комбинации с ДВССЫЛ