три :-) PowerQyery и Четырe - MS Query. Оба инструмента смогут сформировать список с разных листов, отсортированный или нет, с фильтрами или без оных …... Более современный - первый. Единственное что нужно, это обеспечить обновление по кнопке или по событию, но это мелочи.
Только вот Кот в №10 ;-) , как то от темы в сторону увел. Исходная задача была убрать пустые строки в выпадающем списке а свели к объединению списков с разных листов на одном.
Ярослав написал: файл надо будет устанавливать PowerQyery?
Если MSOffice старее 2016, то да. MS Query - встроенный инструмент, но у него есть беда, привязывается к конкретному расположению файла и либо надо менять руками, либо макросом менять путь.
Select *
From (
SELECT `Список 1` as `Список`
FROM `'Список 1$'`
Union
SELECT `Список 2` As `Список`
FROM `'Список 2$'`
Union
SELECT `Список 3` As `Список`
FROM `'Список 3$'`)
WHERE `Список` is not null
Путь менять в Connections DSN=Excel Files;DBQ=C:\Temp\Выпадающий список.xlsx;DefaultDir=C:\Temp;DriverId=1046;MaxBufferSize=2048;PageTimeout=5;
специально убрал часть значений, обновление по правой кнопке - обновить.
Если листов, с которых нужно сформировать список, не очень много, то можно перечислить их так, как сделано в прикреплённом файле. Если же их МНОГО, то можно перечислить их где-нибудь на листе (удобно, если время от времени их нужно менять) и проверять там. Сам именованный диапазон можно скрыть или вообще поместить на скрытом листе.
Select DISTINCT *
From (
SELECT `Список 1` as `Список`
FROM `'Список 1$'`
Union all
SELECT `Список 2` As `Список`
FROM `'Список 2$'`
Union all
SELECT `Список 3` As `Список`
FROM `'Список 3$'`)
WHERE `Список` is not null
+
Код
Private Sub Workbook_Open()
With ActiveWorkbook.Connections("Query from this File").ODBCConnection
.Connection = _
"ODBC;DSN=Excel Files;DBQ=" & ActiveWorkbook.FullName & _
";DriverId=1046;MaxBufferSize=2048;PageTimeout=5;"
End With
End Sub
+
Код
Private Sub Worksheet_Activate()
ListObjects(1).QueryTable.Refresh BackgroundQuery:=False
End Sub
Юрий М, заметил такую штуку. Если например добавить какой-нибудь пункт в список 3 или любой другой список то общий список Unique обновиться только тогда когда кликнешь по выпадающему списку. Почему так происходит?
БМВ, Ваш вариант не могу понять. Это тот же вариант с добавлением файла в TEMP? а для чего его именно туда надо поместить?
______________ Начал изучать VBA с нуля.. через несколько видео уроков меня вырубило.. буквально.
Так происходит потому, что событием, по которому формируются именованный диапазон и выпадающий список, является выделение именно этой ячейки. А зачем Вам видеть сам диапазон? Вас ведь интересует конечный результат - выпадающий список )
Юрий М, сам диапазон видеть не надо. т.е. лист Unique можно вообще скрыть и не знать о нем. НО. если добавить пункт в один из списков то этот пункт не появится в выпадающих списках пока не кликну по выпадающему списку на листе Unique
Ярослав написал: если добавить пункт в один из списков то этот пункт не появится в выпадающих списках пока не кликну по выпадающему списку на листе Unique
Шаг 1. Список 1, Список 2, Список 3 дополняем пункты (строки) Шаг 2. Переходим на Лист 1. Там выпадающие списки. Раскрываем любой из них и видим что из Шаг 1 новые пункты не добавились. т.е. выпадающий список не обновился. Шаг 3. Заходим на лист Unique кликаем по выпадающему списку в C2 и список в А и всех выпадающих списках обновляется.
т.е. получается при добавлении новых пунктов в списках.. выпадающий список не обновляется пока не зайти на Unique и шаг 3
Макрос находится в модуле листа "Unique" и именно на этом листе отслеживается активация ячейки с выпадающим списком. Если нужно создавать список и на другом листе, то об этом ТОЖЕ НУЖНО БЫЛО ГОВОРИТЬ СРАЗУ.
Нет - это событийный макрос, и он должен быть или в модуле листа или в модуле книги. Есть вариант формировать список при активации листа. Точнее - вызывать внешнюю процедуру (она как раз и будет в стандартном модуле), которая и будет это делать при наступлении события активации нужного листа.
Иллюстрация к теме Выпадающий список с пустыми пунктами - как от них избавиться?
Цитата
Ярослав написал: БМВ , Кстати в вашем решении также.
такие задачи делаются или под ключ, когда все данные и выпадающие списки на своих местах и понятно что и когда обновлять, или как прототипы, которые потом допиливаются самостоятельно. Это касается обоих решений.