Здравствуйте! Подскажите, пожалуйста.
Есть книга Эксель. В книге прописаны формулы для поиска данных на Листе 2 (поиск осуществляется по столбцу "Название товара"), а результат поиска выводится на Лист1.
Скажите, пожалуйста, как с помощью пользовательской формы VBA (кнопка "Фильтр" (Лист2)) изменить столбец в котором производится поиск.
Например, если в форме VBA (кнопка "Фильтр" (Лист2)) стоит галочка напротив "Название товара", то поиск производится в столбце "Название товара" и данные из всех колонок выводятся на Лист1, а если в форме VBA (кнопка "Фильтр" (Лист2)) стоит "№ Склада" то поиск производится в столбце "№ Склада" и данные из всех колонок выводятся на Лист1. С другими кнопками аналогично.
Формулу вы делали сами?
Спасибо. Нет, все, что связано с поиском взято с Ютуба.
Вот видео https://youtu.be/FQqnKChfI1c.
И по этому видео уже все под себя подстраивал.
На первый взгляд ваша формула не смотрит заголовки столбцов.
Она работает следующим образом.
СТРОКА([@[Название товара]]) - номер строки, в которой находятся данные, в столбце Название товара.
СТРОКА(УТ_Фильтрация[[#Заголовки];[Название товара]]) - номер строки, в которой находится шапка таблицы.
Далее формула считает: номер строки, в которой данные, минус номер строки, в которой шапка.
Полученное число формула ищет в умной таблице "УТ_Данныедиски" в столбце "Столбец3" (у вас это первый столбец).
Я не вижу, где здесь используется заголовок столбца для поиска данных. Заголовок как таковой не ищется вообще.
Можете, пожалуйста, сказать, как заставить формулу учитывать заголовки?
Опишите словами, что должна делать формула.
По активации кнопки 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», опять выпала вся информация из всех столбцов для груш.
Если пользователь выбрал в ячейке B3 "груши", то на листе "Лист1" не должны отображаться яблоки и гошощщ?
Да, верно
А кто поиск делает? Какой-то макрос?
В B3 вы указали "груши", какие дальнейшие действия пользователя? Пользователь щёлкает какую-то кнопку?
Если в форме отметил кнопку "№ Склада" и после этого в ячейку В3 Лист1 ввел 3000, то тоже отображаются только груши
После ввода "груши" нажимаю кнопку "Найти" (Лист1). Либо Энтер
Сейчас у вас есть макрос "Найти"? Или его надо сделать с нуля?
На кнопке "Найти" стоит записанный макрос (Кнопка16_Щелчок)
Вот такой макрос записался
'Открывает форму "UserForm2" по щелчку на кнопку "ФИЛЬТР"
Sub Кнопка16_Щелчок()
UserForm2.Show
End Sub
Извиняюсь, не тот вставил
'Выполняет поиск на листе "Поиск"
Sub КнопкаНайти()
'
' КнопкаНайти Макрос
' Запускает поиск (Лист(Поиск)ячейкаВ3).
'
' Сочетание клавиш: Ctrl+q
'
End Sub
Но здесь нет кода, значит никакого макроса "Найти" у вас сейчас нет?
Я ввожу текст в ячейку В3 и нажимаю Энтер, производится поиск.
Я включил запись макроса, потом нажал Энтер (в ячейке В3) и остановил запись макроса. После этого назначил этот макрос для кнопки "Найти".
Как прописать код грамотно я не знаю. Поэтому сделал по самому легкому пути.
Но сейчас же кнопка "Найти" вообще ничего не ищет.
Да, согласен. Нужно было назвать "Энтер"
Попробуйте ввести "груши" и нажать кнопку "Найти", выпадут только "груши".
Да, увидел, значит что-то рабочее есть у вас.
Обратите внимание, что на листе "Лист1" у вас две умные таблицы. Вторая начинается со столбца C. Вы это специально сделали или случайно получилось?
Написал вам два письма на почту с заголовком "Письмо с Форума по VBA, Excel и Word". Написал именно на почту, а не на форум.
Форму UserForm1 я удалил из файла, чтобы было проще. Потом можете обратно её вставить.
В модуле "Module3" я переименовал процедуру.
На листе "Лист1" сделал кнопку в D2 "Выбрать столбец".
Код макроса находится в UserForm2.
На листе "Лист2" в A3, M3, N3 я упростил формулу - убрал функцию ПОИСК, т.к. в ней нет необходимости.
Макрос изменяет на листе "Лист2", формулы в A3, M3, N3. Т.к. используется умная таблица, то формула автоматически распространяется на весь столбец.
внесены изменения в макрос, в формулы и я изменил описание в сообщении
То что надо!!! Спасибо вам большое!!
Добрый день! Я ваш код для "Выбор столбца" перенес в другую точно такую же книгу ( только заголовки УТ другие), теперь не работает. Выделяет желтым строчку
Табл.DataBodyRange.Cells(1, 1).Formula = Left(Формула, Начало) & НазвСтолбца & Mid(Формула, Конец)
Можете, пожалуйста, глянуть, что опять не так.
В таблице на листе 2 некоторые строки скрыты.
Сделал новую таблицу потому, что после "опытов" с переносом кнопки таблица на листе 2вообще не заполнялась. При вводе данных в форму вместо того чтобы записывать в новую строку оно постоянно изменяло содержимое последний строки.
1. Я формулу упростил: убрал функции ЕЧИСЛО, ПОИСК. В них нет необходимости - достаточно использовать знак равно. Смотрите файл в сообщении #22.
2. На форме у надписей (Label) на конце есть пробел. Для макроса фраза с пробелом и без пробела - разные. Макрос не видит заголовок и происходит ошибка.
Заработало, спасибо