Виктор C Пользователь Сообщений: 139 |
Добрый день подскажите как можно реализовать поиск в выпадающем списке по смыслу если ввести букву А в поле отображались все что есть на букву Аэпорт, Ателье и тд. Прикрепленные файлы
|
Мотя Пользователь Сообщений: 3218 |
А что мешает предварительно выполнить сортировку данных в этом списке? |
Виктор C Пользователь Сообщений: 139 |
ничего не мешает это так к примеру у меня 10 слов на букву А, а есть очень большие справочники листать их не всегда удобно и не быстро |
Виктор C Пользователь Сообщений: 139 |
Прикрепленные файлы
|
gling Пользователь Сообщений: 4024 |
Здравствуйте. А комбобокс не устраивает? Или выпадающих списков много? Если списков много то можно тот же комбобокс, но с макросом по событию активации ячейки. А уж коли использовать макрос то и формирование списка можно ему доверить, пусть сортирует только соответствующие первым буквам. Подобные темы уже были на форуме. |
Виктор C Пользователь Сообщений: 139 |
gling,не силен в макросах(( я головой понимаю что формулами не все и не всегда сделать. Сейчас делаю автоматизацию производственных процессов на ходу. Обучаться макросам в данный период времени не имею свободного времени |
gling Пользователь Сообщений: 4024 |
Вот вариант того о чем писал. При вводе первых букв предлагается вариант. Но лучше когда список отсортирован,близкие по значениям будут рядом в раскрывающемся списке. |
Виктор C Пользователь Сообщений: 139 |
gling, я типа того уже сделал с помощью элемента ActiveX |
gling Пользователь Сообщений: 4024 |
Посмотрите еще вариант. Для работы нужно активировать ячейку в столбце А. Писал не я, где то слямзил, сейчас уже не вспомню. Спасибо автору, мне очень понравилось по этому и сохранил. Можно настроить сочетание только с начала текста ищет и формирует список, а можно по сочетанию внутри текста. При активации заполненной ячейки ЛистБокс и ТекстБокс не появятся, ну это можете настроить под свои нужды, например на двойной клик очищать ячейку и отображать Боксы. Экспериментируйте. |
Виктор C Пользователь Сообщений: 139 |
gling, круто вообще!!! буду побывать адаптировать, сразу вопрос а если одном листе много таких выпадающих списков нужно вставить в мою таблицу с переменными как указать источники в прилагаемом файле это я как понял UCase(Лист1.Cells(i, 12)) Изменено: Виктор C — 08.10.2017 18:41:23 |
gling Пользователь Сообщений: 4024 |
Да это ссылка на столбец где находятся данные для списка. |
Виктор C Пользователь Сообщений: 139 |
#12 08.10.2017 20:42:58 хочется сделать красиво а VBA я не знаю думал исправлю
Прикрепленные файлы
Изменено: Виктор C — 08.10.2017 21:21:45 |
||
gling Пользователь Сообщений: 4024 |
#13 09.10.2017 22:24:31 Для столбца А и В разные списки, Box используются те же.
Прикрепленные файлы
Изменено: gling — 09.10.2017 22:27:56 |
||
Виктор C Пользователь Сообщений: 139 |
gling, все красиво, я я еще добавил столбец изменил макрос, теперь получилось что каждая ячейка выпадающий список и смешались источники данных столбец M и N теперь подставляет из двух столбцов и каждая ячейка стала выпадающей. Объясните тупому ))) какие переменные нужно менять в макросе чтоб например столбец А с выпадающим списком A брал переменные только с столбца L. Столбец В брал переменные только в столбце M и тд. В моей БОЛЬШОЙ таблице хочу разместить около 15 выпадающих списка.Заранее благодарен. извините за настойчивость Изменено: Виктор C — 19.10.2017 20:24:10 |
phelex Пользователь Сообщений: 174 |
Друг очень крутое решение. Как раз искал. Мысли на доработку (не очень понимаю как реализовано): Было бы очень круто Изменено: phelex — 20.10.2017 07:01:04 невозможное делаем сразу, чудо — требует небольшой подготовки. |
alex1210 Пользователь Сообщений: 1029 |
|
alex1210 Пользователь Сообщений: 1029 |
А если база на другой странице, например лист2 с первого столбца.. что надо изменить? |
gling Пользователь Сообщений: 4024 |
#18 20.10.2017 00:00:13
Если много разных списков, тогда лучше так. Переменную назвал НомерСтолбцаДанных (NomStolbDan), чтоб понятно было что менять.
Прикрепленные файлы
|
||||
alex1210 Пользователь Сообщений: 1029 |
Не получается данные из листа 2 брать.Подскажите что в коде надо изменить |
gling Пользователь Сообщений: 4024 |
Вместо Лист1 напишите имя листа с данными Sheets(«имя листа»). Изменено: gling — 20.10.2017 00:39:46 |
alex1210 Пользователь Сообщений: 1029 |
|
gling Пользователь Сообщений: 4024 |
#22 20.10.2017 00:42:47
А спасибо где? |
||
alex1210 Пользователь Сообщений: 1029 |
|
alex1210 Пользователь Сообщений: 1029 |
#24 20.10.2017 00:50:02 Вот просто код у Вас интересный , а почему Вы его так записали? Я просто учусь програмировать и хочу понять как и что
|
||
Ch. Пользователь Сообщений: 7 |
Добрый день, уважаемые форумчане. В рамках данной темы у меня давно есть нерешенный вопрос. А именно: в приложенных файлах реализован поиск с выпадающем списком. Если копировать код из файлов-примеров возникает ошибка на отсутствие Textbox1 и Listbox1. В иных подобных темах ответ звучал, что нужно их создать или скопировать в своем файле. Но ведь Ваши примеры работают без них, либо они скрыты? И в таком случае как их скопировать из файлов примеров? Изменено: Ch. — 20.10.2017 17:26:03 |
gling Пользователь Сообщений: 4024 |
#26 20.10.2017 18:55:32
Но если речь только о переменной, то переменную уже я добавлял.
Это: НомерСтолбцаСДанными=АктивнаяЯчейка.Столбец+11. Если активировать ячейку в столбце А тогда: НомерСтолбцаСДанными=СтолбецА+11=1+11=12=столбец№12=столбец L. Изменено: gling — 20.10.2017 19:05:34 |
||||||
alex1210 Пользователь Сообщений: 1029 |
|
gling Пользователь Сообщений: 4024 |
#28 20.10.2017 23:04:45
Жмете вкладку Разработчик—Режим конструктора—Ctrl+клик на форму ЛКМ (левой кнопкой мыша)—Копируем (Ctrl+C)—Вставляем (Ctrl+V). Возможно есть и другой вариант, но я делаю так. |
||
Ch. Пользователь Сообщений: 7 |
Спасибо Вам за исчерпывающий ответ. |
phelex Пользователь Сообщений: 174 |
#30 21.10.2017 12:46:46 gling, больше спасибо за ваши ответы. Уточните пожалуйста, а возможно так сделать взаимозависимые списки? Спасибо невозможное делаем сразу, чудо — требует небольшой подготовки. |
Сombobox в userform как сделать поиск из выпадающего списка? |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
В данном примере написаны исходные коды VBA-макросов для проверки ячеек на наличие выпадающих списков (или любых средств, созданных инструментом «проверка данных»). А также код макроса для проверки и получения доступа к ячейкам, которые содержат условное форматирование.
Макрос поиска ячейки с выпадающим списком
Допустим у нас имеется таблица Excel сформированная в результате экспорта журнала фактур из истории взаиморасчетов с клиентами фирмы, как показано ниже на рисунке:
Нам необходимо найти все выпадающие списки или определить каким ячейкам присвоена проверка вводимых данных, создана инструментом: «ДАННЫЕ»-«Работа с данными»-«Проверка данных».
В программе Excel по умолчанию есть встроенный инструмент для поиска ячеек с проверкой правил вводимых значений. Чтобы его использовать следует выбрать: ГЛАВНАЯ»-«Редактирование»-«Найти и выделить»-«Выделить группу ячеек». В появившемся диалоговом окне следует отметить опцию «проверка данных» и нажать на кнопку ОК.
Но как всегда более гибким решением является написание своего специального макроса. Ведь в такие случаи всегда можно усовершенствовать инструмент и дописать много других полезных функций. А этот код макроса послужит прекрасным началом программы.
Откройте редактор макросов Visual Basic (ALT+F11) и создайте новый модуль выбрав в редакторе инструмент: «Insert»-«Module». В созданный модуль введите VBA код макроса:
Sub ProvDan()
Dim i As Long
Dim diapaz1 As Range
Dim diapaz2 As Range
Set diapaz1 = Application.Range(ActiveSheet.Range("A1"), _
ActiveSheet.Cells.SpecialCells(xlCellTypeLastCell))
On Error Resume Next
For i = 1 To diapaz1.Count
If IsError(diapaz1(i).Validation.Type) Then
Else
If diapaz2 Is Nothing Then
Set diapaz2 = diapaz1(i)
Else
Set diapaz2 = Application.Union(diapaz2, diapaz1(i))
End If
End If
Next
On Error GoTo 0
If diapaz2 Is Nothing Then
MsgBox "Ненайдено ниодной ячейки!"
Else
diapaz2.Select
MsgBox "Найдено: " & diapaz2.Count & " ячеек!"
End If
End Sub
Если нужно выделить все ячейки в таблице, которые содержат проверку вводимых значений включенной инструментом «Проверка данных», тогда выберите инструмент: «РАЗРАБОТЧИК»-«Код»-«Макросы»-«ProvDan»-«Выполнить».
В результате выделились 14 ячеек в столбце G, для которых включена проверка данных в стиле выпадающего списка:
В данном коде мы сначала выделяем все ячейки на текущем листе с помощью инструкции:
Cells.Select
После, определяем диапазон ячеек на листе, который использует исходная таблица и с которыми будет работать наш макрос. Чтобы определить диапазон таблицы на рабочем листе Excel, мы могли бы использовать свойство UsedRange при создании экземпляра объекта Range в переменной diapaz1. Данное свойство охватывает только непустые ячейки, а это может быть даже несмежный диапазон. Но таблица может содержать пустые ячейки для, которых присвоена проверка ввода значений. Чтобы наш макрос не игнорировал пустые ячейки внутри таблицы мы определяем смежный (неразрывный) диапазон, который начинается с ячейки A1 и заканчивается последней используемой ячейкой на рабочем листе Excel.
Set diapaz1 = Application.Range(ActiveSheet.Range(«A1»), ActiveSheet.Cells.SpecialCells(xlCellTypeLastCell))
Последняя ячейка находиться наиболее отдаленно от ячейки A1 (в данном примере – это G15) и была использована на листе (это обязательное условие). При чем использована в прямом смысле, она может даже не содержать значения, но иметь измененный числовой формат, другой цвет фона, другие границы, объединение и т.п. Чтобы найти последнюю используемую ячейку на листе стандартными средствами Excel, выберите инструмент: «ГЛАВНАЯ»-«Редактирование»-«Найти и выделить»-«Выделить группу ячеек».
В появившемся окне следует выбрать опцию «последнюю ячейку». А после просто нажать ОК. Курсор клавиатуры сразу переместиться на последнюю используемую ячейку на рабочем листе Excel.
Можно даже при создании экземпляра объекта Range в переменной diapaz1 использовать диапазон целого листа. Для этого просто замените выше описанную инструкцию на:
Set diapaz1 = Selection
Так на первый взгляд даже проще, но тогда макрос будет проверять все ячейки на листе и потребует больше ресурсов. Особенно если мы при изменении этой инструкции не удалим инструкцию выделения всех ячеек на листе Excel. Таким кодом макроса, можно существенно снизить производительность работы программы Excel при его выполнении. Поэтому так делать не рекомендуется. Проверяйте ячейки только те, которые были использованы на листе. Так вы получите в десятки раз меньший диапазон и выше производительность макроса.
Далее в коде макроса перед циклом прописана инструкция для выключения обработки ошибок, выполняемых в коде.
On Error Resume Next
Но после конца цикла обработка ошибок снова включается.
On Error GoTo 0
Внутри цикла проверяться по отдельности все ячейки на наличие включенной проверки вводимых значений инструментом «Проверка данных». Если ячейка содержит проверку вводимых значений?
If IsError(diapaz1(i).Validation.Type) Then
Тогда она присоединяется к диапазону ячеек, находящихся в переменной diapaz2.
Set diapaz2 = Application.Union(diapaz2, diapaz1(i))
В конце кода выделяется несмежный диапазон переменной diapaz2, который включает в себя все выпадающие списки на текущем рабочем листе Excel. И сразу же выводиться сообщение о количестве найденных и выделенных ячеек в этом же диапазоне.
MsgBox «Найдено: » & diapaz2.Count & » ячеек!»
Макрос поиска ячейки с условным форматированием
Некоторые ячейки в исходной таблице содержат условное форматирование, а пользователю Excel необходимо их все найти и выделить. Очень часто нельзя визуально определить присвоено ли ячейке условное форматирование или нет. Чтобы найти и выделить ячейки с условным форматированием в Excel можно воспользоваться встроенным инструментом. Просто необходимо выбрать опцию в меню: «ГЛАВНАЯ»-«Редактирование»-«Найти и выделить»-«Выделить группу ячеек».
В появившемся окне отмечаем опцию «условные форматы» и нажимаем кнопку ОК.
Но если мы хотим получить доступ к каждой выделенной ячейки и проделать с ними какие-либо операции, тогда следует воспользоваться более гибким инструментом. А конкретнее написать макрос. В данном примере мы напишем макрос, который будет автоматически выделять и считать количество ячеек с условным форматированием.
Снова откройте редактор Visual Basic (ALT+F11) и в уже созданный модуль добавьте новый код для нового макроса:
Sub ProvFormat()
Dim i As Long
Dim diapaz1 As Range
Dim diapaz2 As Range
Set diapaz1 = Application.Range(ActiveSheet.Range("A1"), _
ActiveSheet.Cells.SpecialCells(xlCellTypeLastCell))
For i = 1 To diapaz1.Count
If diapaz1(i).FormatConditions.Count > 0 Then
If diapaz2 Is Nothing Then
Set diapaz2 = diapaz1(i)
Else
Set diapaz2 = Application.Union(diapaz2, diapaz1(i))
End If
End If
Next
If diapaz2 Is Nothing Then
MsgBox "Ненайдено ниодной ячейки!"
Else
diapaz2.Select
MsgBox "Найдено: " & diapaz2.Count & " ячеек!"
End If
End Sub
Теперь чтобы проверить, посчитать и выделить все ячейки для которых было применено любое условное форматирование запустите макрос: «РАЗРАБОТЧИК»-«Код»-«Макросы»-«ProvFormat»-«Выполнить».
В результате будут выделены все соответствующие ячейки и отобразиться сообщение с информацией о их количестве:
В этом макросе уже нет необходимости отключать контроль ошибок в процессе выполнения инструкций внутри цикла.
Проверка ячеек на наличие условного форматирования выполняется с помощью свойства Cuont для объекта FormatConditions. Если данное свойство возвращает значение 0, то для текущей ячейки не применялось ни одно условное форматирование.
If diapaz1(i).FormatConditions.Count > 0 Then
Разобравшись и поняв принцип действия этих макросов, пользователь теперь может получать доступ к определенной группе чек и выполнять с ними различные действия. Просто нужно изменить макрос под свои потребности и вместе где прописана инструкция для вывода сообщения о количестве выделенных определенных групп ячеек прописать свои собственные инструкции.
Надстройка для облегчения ввода значений в ячейку Excel
Автор: nerv
Last Update: 27/03/2012
Вам часто приходится заниматься заполнением электронных таблиц, долго и муторно выбирать варианты из выпадающих списков?
А, может, иметь дело с одними теми же, но не структурированными данными?
Раз так, то данная надстройка призвана облегчить Вам жизнь: сократить время, потраченное на нудную, однообразную работу, а вместе с тем повысить ее качество и эффективность.
Как это работает:
По нажатию Ctrl+Enter рядом с выделенной ячейкой появляется список, который позволяет не только выбирать, но и производить поиск по интересующим Вас данным.
Посмотрим, что он умеет:
- Не содержит повторов (уникальный). Легко выявить однотипные данные;
- Отсортирован по возрастанию. Возможность быстро найти то, что нужно;
- После вызова сразу готов к поиску/выбору из списка. Лишние движения ни к чему;
- Позволяет искать с использованием специальных подстановочных символов (*,?,~ и т.п.);
- Осуществлять быстрый поиск по «шаблону». Если ячейка, из которой был вызван список, содержит информацию, поиск будет произведен по ней;
- Появляется рядом с текущей/активной ячейкой и не «убегает» за пределы экрана;
- Навигация привычными стандартными клавишами: Up [Вверх], Down [Вниз], Page Up [На страницу Вверх ], Page Down [На страницу вниз];
- Корректная работа со всеми типами данных: строки, даты, числа;
- Обработка ошибок формул листа. Никаких пустых строк в списке;
- Обработка защиты ячеек листа. В защищенные ячейки ввод запрещен;
- Информация об общем количестве списка и найденных по запросу элементах;
- Быстрый вызов по нажатию Ctrl+Enter;
- Быстрое закрытие: клавиша Esc;
- Быстрый ввод клавишей Enter
Помимо всего вышеперечисленного, позволяет сэкономить на размере файла за счет формирования списка «на лету», который создается в разы быстрее, если данные упорядочены или частично упорядочены по возрастанию.
Отличия версии 1.6 от 1.5:
- новая, более мощная/быстрая процедура сортировки;
- переход после ввода на следующую ячейку (в зависимости от установок Excel);
Добавлены настройки:
- использования и формирования списка (подробнее во вложении «how to use»);
- поиска с учетом регистра и без него;
- маски поиска;
- заголовков.
- 160194 просмотра
Не получается применить макрос? Не удаётся изменить код под свои нужды?
Оформите заказ у нас на сайте, не забыв прикрепить примеры файлов, и описать, что и как должно работать.
mc-black, возник вопрос по Вашему списку.Нашел небольшой недочет в ее появлении.
При выборе ячейки расположенных ~ до 100 строки форма появляется на экран но соответственно ее разположение постоянно меняется на экране.А когда выбираешь ячейку со строкой 100+ то и вовсе пропадает с экрана,видимо открывается вне его видимости.
Вопрос:как закрепить ее местоположения так ,чтобы она например окрывалась все время по центру вне зависимости в каком месте листа я нахожусь?
Долго просматривал код ,возможно вот здесь нужно помимо данных функций добавить еще чтото,касающееся ее расположения?
Visual Basic | ||
|
Очень большая просьба помочь…
Добавлено через 30 минут
Всегда,как чтото спрашиваю,тут же через 5 минут решаю сам эту проблему)
разобрался )
нужно было просто изменить в свойствах формы start up position на CenterScreen)