Форум по VBA и MS Office

VBA, Excel => VBA, макросы в Excel => Тема начата: Посетитель от 16 августа 2023, 16:57

Название: Фильтр поиска
Отправлено: Посетитель от 16 августа 2023, 16:57
Здравствуйте! Подскажите, пожалуйста.
Есть книга Эксель. В книге прописаны формулы для поиска данных на Листе 2 (поиск осуществляется по столбцу "Название товара"), а результат поиска выводится на Лист1.
Скажите, пожалуйста, как с помощью пользовательской формы VBA (кнопка "Фильтр" (Лист2)) изменить столбец в котором производится поиск.
Например, если в форме VBA (кнопка "Фильтр" (Лист2)) стоит галочка напротив "Название товара", то поиск производится в столбце "Название товара" и данные из всех колонок выводятся на Лист1, а если в форме VBA (кнопка "Фильтр" (Лист2)) стоит "№ Склада"  то поиск производится в столбце "№ Склада" и данные из всех колонок выводятся на Лист1. С другими кнопками аналогично.
Название: Фильтр поиска
Отправлено: Администратор от 16 августа 2023, 18:36
Формулу вы делали сами?
Название: Фильтр поиска
Отправлено: Посетитель от 16 августа 2023, 18:46
Спасибо. Нет, все, что связано с поиском взято с Ютуба.
Вот видео https://youtu.be/FQqnKChfI1c.
И по этому видео уже все под себя подстраивал.
Название: Фильтр поиска
Отправлено: Администратор от 16 августа 2023, 18:54
На первый взгляд ваша формула не смотрит заголовки столбцов.
Она работает следующим образом.
СТРОКА([@[Название товара]]) - номер строки, в которой находятся данные, в столбце Название товара.
СТРОКА(УТ_Фильтрация[[#Заголовки];[Название товара]]) - номер строки, в которой находится шапка таблицы.

Далее формула считает: номер строки, в которой данные, минус номер строки, в которой шапка.
Полученное число формула ищет в умной таблице "УТ_Данныедиски" в столбце "Столбец3" (у вас это первый столбец).

Я не вижу, где здесь используется заголовок столбца для поиска данных. Заголовок как таковой не ищется вообще.
Название: Фильтр поиска
Отправлено: Посетитель от 16 августа 2023, 18:58
Можете, пожалуйста, сказать, как заставить формулу учитывать заголовки?
Название: Фильтр поиска
Отправлено: Администратор от 16 августа 2023, 20:07
Опишите словами, что должна делать формула.
Название: Фильтр поиска
Отправлено: Посетитель от 16 августа 2023, 21:53
По активации кнопки OptionButton1 напротив текста «Название товара» (UserForm2).
При таком условии Эксель ищет данные в столбце «Название товара».Я в ячейку поиска на листе1 вписываю, например слово груши (слово из столбца «С») и Эксель выводит в таблицу на листе1 ячейки С3-К3.
По активации кнопки OptionButton2 напротив текста «№ Склада» (UserForm2).
При таком условии Эксель ищет данные в столбце «№ Склада». Я в ячейку поиска на листе1 вписываю, например цифру 3000(цифра из столбца «Д») и Эксель выводит в таблицу на листе1 ячейки С3-К3.
По активации кнопки OptionButton3 напротив текста «№ Склада» (UserForm2).
При таком условии Эксель ищет данные в столбце «№ Склада». Я в ячейку поиска на листе1 вписываю, например цифру 3000(цифра из столбца «Д») и Эксель выводит в таблицу на листе1 ячейки С3-К3.
Я хочу проводить поиск по разным критериям.
Активировал кнопку OptionButton1 напротив текста «Название товара» (UserForm2).
Ввел в ячейку поиска слово «груши» выпала вся информация из всех столбцов для груш.
Активировал кнопку OptionButton2 напротив текста «№ Склада» (UserForm2).
Ввел в ячейку поиска цифру «3000», опять выпала вся информация из всех столбцов для груш.
Название: Фильтр поиска
Отправлено: Администратор от 16 августа 2023, 22:10
Если пользователь выбрал в ячейке B3 "груши", то на листе "Лист1" не должны отображаться яблоки и гошощщ?
Название: Фильтр поиска
Отправлено: Посетитель от 16 августа 2023, 22:13
Да, верно
Название: Фильтр поиска
Отправлено: Администратор от 16 августа 2023, 22:16
А кто поиск делает? Какой-то макрос?
В B3 вы указали "груши", какие дальнейшие действия пользователя? Пользователь щёлкает какую-то кнопку?
Название: Фильтр поиска
Отправлено: Посетитель от 16 августа 2023, 22:18
Если в форме отметил кнопку "№ Склада" и после этого в ячейку В3 Лист1 ввел 3000, то тоже отображаются только груши
Название: Фильтр поиска
Отправлено: Посетитель от 16 августа 2023, 22:19
После ввода "груши" нажимаю кнопку "Найти" (Лист1). Либо Энтер
Название: Фильтр поиска
Отправлено: Администратор от 16 августа 2023, 22:22
Сейчас у вас есть макрос "Найти"? Или его надо сделать с нуля?
Название: Фильтр поиска
Отправлено: Посетитель от 16 августа 2023, 22:22
На кнопке "Найти" стоит записанный макрос (Кнопка16_Щелчок)
Название: Фильтр поиска
Отправлено: Посетитель от 16 августа 2023, 22:23
Вот такой макрос записался
'Открывает форму "UserForm2" по щелчку на кнопку "ФИЛЬТР"
Sub Кнопка16_Щелчок()
UserForm2.Show
End Sub
Название: Фильтр поиска
Отправлено: Посетитель от 16 августа 2023, 22:24
Извиняюсь, не тот вставил
 'Выполняет поиск на листе "Поиск"
Sub КнопкаНайти()
'
' КнопкаНайти Макрос
' Запускает поиск (Лист(Поиск)ячейкаВ3).
'
' Сочетание клавиш: Ctrl+q
'
End Sub
Название: Фильтр поиска
Отправлено: Администратор от 16 августа 2023, 22:25
Но здесь нет кода, значит никакого макроса "Найти" у вас сейчас нет?
Название: Фильтр поиска
Отправлено: Посетитель от 16 августа 2023, 22:29
Я ввожу текст в ячейку В3 и нажимаю Энтер, производится поиск.
Я включил запись макроса, потом нажал Энтер (в ячейке В3) и остановил запись макроса. После этого назначил этот макрос для кнопки "Найти".
Как прописать код грамотно я не знаю. Поэтому сделал по самому легкому пути.
Название: Фильтр поиска
Отправлено: Администратор от 16 августа 2023, 22:30
Но сейчас же кнопка "Найти" вообще ничего не ищет.
Название: Фильтр поиска
Отправлено: Посетитель от 16 августа 2023, 22:32
Да, согласен. Нужно было назвать "Энтер"
Название: Фильтр поиска
Отправлено: Посетитель от 16 августа 2023, 22:35
Попробуйте ввести "груши" и нажать кнопку "Найти", выпадут только "груши".
Название: Фильтр поиска
Отправлено: Администратор от 16 августа 2023, 22:38
Да, увидел, значит что-то рабочее есть у вас.

Обратите внимание, что на листе "Лист1" у вас две умные таблицы. Вторая начинается со столбца C. Вы это специально сделали или случайно получилось?
Название: Фильтр поиска
Отправлено: Администратор от 16 августа 2023, 23:07
Написал вам два письма на почту с заголовком "Письмо с Форума по VBA, Excel и Word". Написал именно на почту, а не на форум.

Форму UserForm1 я удалил из файла, чтобы было проще. Потом можете обратно её вставить.
В модуле "Module3" я переименовал процедуру.
На листе "Лист1" сделал кнопку в D2 "Выбрать столбец".
Код макроса находится в UserForm2.
На листе "Лист2" в A3, M3, N3 я упростил формулу - убрал функцию ПОИСК, т.к. в ней нет необходимости.
Макрос изменяет на листе "Лист2", формулы в A3, M3, N3. Т.к. используется умная таблица, то формула автоматически распространяется на весь столбец.
Название: Фильтр поиска
Отправлено: Администратор от 16 августа 2023, 23:51
внесены изменения в макрос, в формулы и я изменил описание в сообщении
Название: Фильтр поиска
Отправлено: Посетитель от 16 августа 2023, 23:54
То что надо!!! Спасибо вам большое!!
Название: Фильтр поиска
Отправлено: Посетитель от 19 августа 2023, 17:22
Добрый день! Я ваш код для "Выбор столбца" перенес в другую точно такую же книгу ( только заголовки УТ другие), теперь не работает. Выделяет желтым строчку
Табл.DataBodyRange.Cells(1, 1).Formula = Left(Формула, Начало) & НазвСтолбца & Mid(Формула, Конец)
Можете, пожалуйста, глянуть, что опять не так.
В таблице на листе 2 некоторые строки скрыты.
Сделал новую таблицу потому, что после "опытов" с переносом кнопки таблица на листе 2вообще не заполнялась. При вводе данных в форму вместо того чтобы записывать в новую строку оно постоянно изменяло содержимое последний строки.
Название: Фильтр поиска
Отправлено: Администратор от 19 августа 2023, 17:44
1. Я формулу упростил: убрал функции ЕЧИСЛО, ПОИСК. В них нет необходимости - достаточно использовать знак равно. Смотрите файл в сообщении #22.
2. На форме у надписей (Label) на конце есть пробел. Для макроса фраза с пробелом и без пробела - разные. Макрос не видит заголовок и происходит ошибка.
Название: Фильтр поиска
Отправлено: Посетитель от 19 августа 2023, 17:56
Заработало, спасибо