Столкнулся с задачей создания макроса на VBA, который должен открыть другую книгу, считать из нее данные по листам и создать таблицу из двух колонок, в которых: 1 колонка - ячейки с выпадающим списком имен всех листов 2 колонка - ячейки с выпадающим списком данных с соответствующего листа, выбранного в колонке 1 (то есть обычный зависимый список).
Сама по себе задача простая и не раз уже делал зависимые списки, но сейчас уперся в то, что многие имена листов содержат разные "недопустимые" для имени диапазона символы (пробелы, скобки и тд), типа «Труба Д16 (тип 1)». По идее все можно как-то переименовать, но это сильно осложнит работу с данными (помимо просто длительной мороки), так как такие имена нужны для работы и на них завязаны еще другие таблицы, созданные ранее. Ну и просто желательно видеть в первой колонке нормальные описания, а не комбинацию сокращений с заменами (типа «Труба_Д16_тип_1»). Пробовал при создании имен списков делать замену имени листа на "правильные" - сами списки создаются нормально, но не могу придумать, как по "нормальному" значению в колонке 1 выбрать из соответствующего списка (с корректированным именем) нужные данные для второй колонки. То есть имеем в ячейке первой колонки значение «Труба Д16 (тип 1)», имеем именованный список «Труба_Д16_тип_1» с нужными данными для второй колонки, но как их связать? Один из вариантов - создавать макросом для каждой ячейки во 2 колонке валидацию с выбором из соответствующего списка, а при изменении ячейки в 1й колонке – подменять имя списка. Но кажется слишком громоздко, и работать будет, наверно, медленно. Может быть есть более изящная идея? Еще думал в направлении использовать ссылки/формулы в списках: типа в ячейке 1 отображается имя/значение, а реально это ссылка или формула на что-то другое и при обращении как-то подставляется нужное имя списка. Но реализацию не придумал. Еще вариант - сделать через скрытую доп колонку, куда выводить вычисляемое "скорректированное" значение из колонки 1 и уже на нее навешивать зависимые списки для колонки 2.
Доброго дня!
Столкнулся с задачей создания макроса на VBA, который должен открыть другую книгу, считать из нее данные по листам и создать таблицу из двух колонок, в которых: 1 колонка - ячейки с выпадающим списком имен всех листов 2 колонка - ячейки с выпадающим списком данных с соответствующего листа, выбранного в колонке 1 (то есть обычный зависимый список).
Сама по себе задача простая и не раз уже делал зависимые списки, но сейчас уперся в то, что многие имена листов содержат разные "недопустимые" для имени диапазона символы (пробелы, скобки и тд), типа «Труба Д16 (тип 1)». По идее все можно как-то переименовать, но это сильно осложнит работу с данными (помимо просто длительной мороки), так как такие имена нужны для работы и на них завязаны еще другие таблицы, созданные ранее. Ну и просто желательно видеть в первой колонке нормальные описания, а не комбинацию сокращений с заменами (типа «Труба_Д16_тип_1»). Пробовал при создании имен списков делать замену имени листа на "правильные" - сами списки создаются нормально, но не могу придумать, как по "нормальному" значению в колонке 1 выбрать из соответствующего списка (с корректированным именем) нужные данные для второй колонки. То есть имеем в ячейке первой колонки значение «Труба Д16 (тип 1)», имеем именованный список «Труба_Д16_тип_1» с нужными данными для второй колонки, но как их связать? Один из вариантов - создавать макросом для каждой ячейки во 2 колонке валидацию с выбором из соответствующего списка, а при изменении ячейки в 1й колонке – подменять имя списка. Но кажется слишком громоздко, и работать будет, наверно, медленно. Может быть есть более изящная идея? Еще думал в направлении использовать ссылки/формулы в списках: типа в ячейке 1 отображается имя/значение, а реально это ссылка или формула на что-то другое и при обращении как-то подставляется нужное имя списка. Но реализацию не придумал. Еще вариант - сделать через скрытую доп колонку, куда выводить вычисляемое "скорректированное" значение из колонки 1 и уже на нее навешивать зависимые списки для колонки 2.k1601
Сообщение отредактировал k1601 - Среда, 18.06.2025, 08:35