Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Поиск в столбце по нескольким условиям - Мир MS Excel

Регистрация · Логин: · Пароль: · · Забыли пароль?
  • Страница 1 из 1
  • 1
Модератор форума: _Boroda_, Manyasha, SLAVICK, китин  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Поиск в столбце по нескольким условиям (Макросы/Sub)
Поиск в столбце по нескольким условиям
Гордей Дата: Вторник, 19.02.2019, 22:21 | Сообщение № 1
Группа: Пользователи
Ранг: Новичок
Сообщений: 32
Репутация: 0 ±
Замечаний: 0% ±

Excel 2007
Приветствую!

Помогите пожалуйста доделать макросы, чтобы из двух сделать один. Суть такова - есть данные (диапазон C1:C3000), по которым макрос производит поиск (а-ля Ctrl-f) и находит каждое заданное в макросе совпадение после текущей ячейки и останавливается на найденной, выделяя её, затем при новом выполнении макроса следующую найденную ячейку. На данный момент это всё работает, но с помощью двух макросов, а надо бы вообще 3 слова для совпадения. Так как Find не позволяет делать OR, чтобы задать не одно, а несколько искомых слов, и поиск возможных готовых решений в Интернете приводит к очень сложным примерам, то прошу помочь в создании такого макроса вас, уважаемые Гуру VBA.

Цель - один макрос, который в заданном диапазоне построчно просматривает на наличие трёх вариантов, и останавливается на первом из найденных. При следующем запуске макроса он ищет дальше.
В прикреплённом файле упростил до 111,222 и тд
К сообщению приложен файл: Macro.xlsb(28.2 Kb)
 
Ответить
СообщениеПриветствую!

Помогите пожалуйста доделать макросы, чтобы из двух сделать один. Суть такова - есть данные (диапазон C1:C3000), по которым макрос производит поиск (а-ля Ctrl-f) и находит каждое заданное в макросе совпадение после текущей ячейки и останавливается на найденной, выделяя её, затем при новом выполнении макроса следующую найденную ячейку. На данный момент это всё работает, но с помощью двух макросов, а надо бы вообще 3 слова для совпадения. Так как Find не позволяет делать OR, чтобы задать не одно, а несколько искомых слов, и поиск возможных готовых решений в Интернете приводит к очень сложным примерам, то прошу помочь в создании такого макроса вас, уважаемые Гуру VBA.

Цель - один макрос, который в заданном диапазоне построчно просматривает на наличие трёх вариантов, и останавливается на первом из найденных. При следующем запуске макроса он ищет дальше.
В прикреплённом файле упростил до 111,222 и тд

Автор - Гордей
Дата добавления - 19.02.2019 в 22:21
_Boroda_ Дата: Среда, 20.02.2019, 16:00 | Сообщение № 2
Группа: Модераторы
Ранг: Местный житель
Сообщений: 15576
Репутация: 6077 ±
Замечаний: 0% ±

2003; 2007; 2010; 2013 RUS
Такой вариант
[vba]
Код
Sub PoiskNesk()
n_ = 3
ReDim ar(1 To n_)
ar(1) = 222
ar(2) = 333
ar(3) = 444
z_ = 9999999
r1_ = z_
r2_ = z_
c0_ = "C"
r00_ = 12
rr_ = Cells(Rows.Count, c0_).End(3).Row
r0_ = ActiveCell.Row
If r0_ > rr_ Then
r0_ = rr_
End If
On Error Resume Next
For i = 1 To n_
r_ = Cells(r00_, c0_).Resize(rr_ - r00_ + 1).Find(What:=ar(i), After:=Cells(r0_, c0_), LookIn:=xlValues).Row
If r_ < r0_ Then
If r_ < r1_ Then
r1_ = r_
End If
Else
If r_ < r2_ Then
r2_ = r_
End If
End If
Next i
If r2_ <> z_ Then
r1_ = r2_
End If
Cells(r1_, c0_).Activate
End Sub
[/vba]
Можно пойти дальше и искомые значения писать не в коде макроса, а прямо на кнопке, потом макросом оттуда считывать и искать. А кнопок таких несколько штук сделать, для разных поисков. Но макрос на всех этих кнопках будет один
Не стал так делать потому, что не знаю, нужно или нет. А просто так неохота время тратить
К сообщению приложен файл: Macro_1.xlsb(23.9 Kb)


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
СообщениеТакой вариант
[vba]
Код
Sub PoiskNesk()
n_ = 3
ReDim ar(1 To n_)
ar(1) = 222
ar(2) = 333
ar(3) = 444
z_ = 9999999
r1_ = z_
r2_ = z_
c0_ = "C"
r00_ = 12
rr_ = Cells(Rows.Count, c0_).End(3).Row
r0_ = ActiveCell.Row
If r0_ > rr_ Then
r0_ = rr_
End If
On Error Resume Next
For i = 1 To n_
r_ = Cells(r00_, c0_).Resize(rr_ - r00_ + 1).Find(What:=ar(i), After:=Cells(r0_, c0_), LookIn:=xlValues).Row
If r_ < r0_ Then
If r_ < r1_ Then
r1_ = r_
End If
Else
If r_ < r2_ Then
r2_ = r_
End If
End If
Next i
If r2_ <> z_ Then
r1_ = r2_
End If
Cells(r1_, c0_).Activate
End Sub
[/vba]
Можно пойти дальше и искомые значения писать не в коде макроса, а прямо на кнопке, потом макросом оттуда считывать и искать. А кнопок таких несколько штук сделать, для разных поисков. Но макрос на всех этих кнопках будет один
Не стал так делать потому, что не знаю, нужно или нет. А просто так неохота время тратить

Автор - _Boroda_
Дата добавления - 20.02.2019 в 16:00
InExSu Дата: Среда, 20.02.2019, 19:53 | Сообщение № 3
Группа: Проверенные
Ранг: Ветеран
Сообщений: 573
Репутация: 67 ±
Замечаний: 0% ±

Excel 2010
Привет!

Для любого количества искомых значений, любых диапазонов (надеюсь и не тестировал) во вложении.
К сообщению приложен файл: InExSu____.xlsb(34.9 Kb)


На сохранение второго закона термодинамики: яндекс.кошелёк 410012113235839

Сообщение отредактировал InExSu - Среда, 20.02.2019, 19:58
 
Ответить
СообщениеПривет!

Для любого количества искомых значений, любых диапазонов (надеюсь и не тестировал) во вложении.

Автор - InExSu
Дата добавления - 20.02.2019 в 19:53
Гордей Дата: Среда, 20.02.2019, 20:42 | Сообщение № 4
Группа: Пользователи
Ранг: Новичок
Сообщений: 32
Репутация: 0 ±
Замечаний: 0% ±

Excel 2007
Но макрос на всех этих кнопках будет один


Ох.. Спасибо огромное! В представленном Вами варианте работает! На кнопки вешать искомые слова не нужно, они будут всегда статичны и прописаны в самом макросе.

Но после редактирования макроса по свои нужды выяснилось следующее: при поиске по столбцу С, если есть пустые ячейки между данными (а их может быть много) - то макрос почему-то стопорится на одной из ячеек и дальше "не идёт"

В прикреплённом варианте макрос останавливается на 31-й строке, хотя дальше находятся много искомых слов. Посмотрите пожалуйста, уважаемый _Boroda_ :shy:

UPDATE:
Для любого количества искомых значений, любых диапазонов (надеюсь и не тестировал) во вложении.


Приветствую! Спасибо большое! Код Бороды выглядит для меня более понятным и простым) Благодарю Вас за помощь!
К сообщению приложен файл: Macro2.xlsb(34.2 Kb)


Сообщение отредактировал Гордей - Среда, 20.02.2019, 20:49
 
Ответить
Сообщение
Но макрос на всех этих кнопках будет один


Ох.. Спасибо огромное! В представленном Вами варианте работает! На кнопки вешать искомые слова не нужно, они будут всегда статичны и прописаны в самом макросе.

Но после редактирования макроса по свои нужды выяснилось следующее: при поиске по столбцу С, если есть пустые ячейки между данными (а их может быть много) - то макрос почему-то стопорится на одной из ячеек и дальше "не идёт"

В прикреплённом варианте макрос останавливается на 31-й строке, хотя дальше находятся много искомых слов. Посмотрите пожалуйста, уважаемый _Boroda_ :shy:

UPDATE:
Для любого количества искомых значений, любых диапазонов (надеюсь и не тестировал) во вложении.


Приветствую! Спасибо большое! Код Бороды выглядит для меня более понятным и простым) Благодарю Вас за помощь!

Автор - Гордей
Дата добавления - 20.02.2019 в 20:42
InExSu Дата: Среда, 20.02.2019, 20:59 | Сообщение № 5
Группа: Проверенные
Ранг: Ветеран
Сообщений: 573
Репутация: 67 ±
Замечаний: 0% ±

Excel 2010
более понятным и простым

С какой строки мой код менее понятен? А то я, ничтоже сумняшеся, свой код считаю более понятным :-)


На сохранение второго закона термодинамики: яндекс.кошелёк 410012113235839
 
Ответить
Сообщение
более понятным и простым

С какой строки мой код менее понятен? А то я, ничтоже сумняшеся, свой код считаю более понятным :-)

Автор - InExSu
Дата добавления - 20.02.2019 в 20:59
Гордей Дата: Среда, 20.02.2019, 21:10 | Сообщение № 6
Группа: Пользователи
Ранг: Новичок
Сообщений: 32
Репутация: 0 ±
Замечаний: 0% ±

Excel 2007
С какой строки мой код менее понятен? А то я, ничтоже сумняшеся, свой код считаю более понятным :-)


Например: в коде Бороды быстро нашёл, где поменять значения искомых слов и задать их кол-во. В Вашем макросе данные для поиска берутся из ячеек, и как их "впихнуть" в макрос (а их 6-7 слов для поиска) - не представляю, потому что не владею VBA. И ещё в Вашем макросе идёт поиск только по данным, пока не встретится пустая ячейка(и). А данные могут быть как угодно по столбцу С распределены, но не более 3000 строк. Скачайте мой файл выше с кодом Бороды - я там его переделал для своих нужд, посмотрите.. Если поправите Ваш макрос, и он будет работать без сюрпризов - супер!


Сообщение отредактировал Гордей - Среда, 20.02.2019, 21:11
 
Ответить
Сообщение
С какой строки мой код менее понятен? А то я, ничтоже сумняшеся, свой код считаю более понятным :-)


Например: в коде Бороды быстро нашёл, где поменять значения искомых слов и задать их кол-во. В Вашем макросе данные для поиска берутся из ячеек, и как их "впихнуть" в макрос (а их 6-7 слов для поиска) - не представляю, потому что не владею VBA. И ещё в Вашем макросе идёт поиск только по данным, пока не встретится пустая ячейка(и). А данные могут быть как угодно по столбцу С распределены, но не более 3000 строк. Скачайте мой файл выше с кодом Бороды - я там его переделал для своих нужд, посмотрите.. Если поправите Ваш макрос, и он будет работать без сюрпризов - супер!

Автор - Гордей
Дата добавления - 20.02.2019 в 21:10
_Boroda_ Дата: Среда, 20.02.2019, 21:34 | Сообщение № 7
Группа: Модераторы
Ранг: Местный житель
Сообщений: 15576
Репутация: 6077 ±
Замечаний: 0% ±

2003; 2007; 2010; 2013 RUS
Да, не учел, что Миша может быть единственный
Добавьте знак "=" в строку 25
[vba]
Код
If r_ <= r0_ Then
[/vba]
К сообщению приложен файл: Macro2_1.xlsb(25.9 Kb)


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
СообщениеДа, не учел, что Миша может быть единственный
Добавьте знак "=" в строку 25
[vba]
Код
If r_ <= r0_ Then
[/vba]

Автор - _Boroda_
Дата добавления - 20.02.2019 в 21:34
Гордей Дата: Среда, 20.02.2019, 21:43 | Сообщение № 8
Группа: Пользователи
Ранг: Новичок
Сообщений: 32
Репутация: 0 ±
Замечаний: 0% ±

Excel 2007
Добавьте знак "=" в строку 25


Ай СПАСИБО Вам, дорогой и уважаемый Борода! ОГРОМНОЕ, такое, БОЛЬШОЕ СПАСИБО!!! Всех благ Вам!

InExSu, и Вам СПАСИБО за участие! Благодарю! Макрос Бороды работает теперь идеально.
 
Ответить
Сообщение
Добавьте знак "=" в строку 25


Ай СПАСИБО Вам, дорогой и уважаемый Борода! ОГРОМНОЕ, такое, БОЛЬШОЕ СПАСИБО!!! Всех благ Вам!

InExSu, и Вам СПАСИБО за участие! Благодарю! Макрос Бороды работает теперь идеально.

Автор - Гордей
Дата добавления - 20.02.2019 в 21:43
InExSu Дата: Среда, 20.02.2019, 21:53 | Сообщение № 9
Группа: Проверенные
Ранг: Ветеран
Сообщений: 573
Репутация: 67 ±
Замечаний: 0% ±

Excel 2010
без сюрпризов

маловероятно.
Во вложении.
К сообщению приложен файл: InExSu_Macro2.xlsb(34.8 Kb)


На сохранение второго закона термодинамики: яндекс.кошелёк 410012113235839

Сообщение отредактировал InExSu - Среда, 20.02.2019, 21:53
 
Ответить
Сообщение
без сюрпризов

маловероятно.
Во вложении.

Автор - InExSu
Дата добавления - 20.02.2019 в 21:53
Гордей Дата: Среда, 20.02.2019, 22:57 | Сообщение № 10
Группа: Пользователи
Ранг: Новичок
Сообщений: 32
Репутация: 0 ±
Замечаний: 0% ±

Excel 2007
маловероятно.


Вроде без сюрпризов работает код. Только не пойму, как переделать код так, чтобы данные для поиска были жёстко прописаны в макросе, а не брались из ячеек столба 1
 
Ответить
Сообщение
маловероятно.


Вроде без сюрпризов работает код. Только не пойму, как переделать код так, чтобы данные для поиска были жёстко прописаны в макросе, а не брались из ячеек столба 1

Автор - Гордей
Дата добавления - 20.02.2019 в 22:57
InExSu Дата: Среда, 20.02.2019, 23:27 | Сообщение № 11
Группа: Проверенные
Ранг: Ветеран
Сообщений: 573
Репутация: 67 ±
Замечаний: 0% ±

Excel 2010
прописаны в макросе

Во вложении
К сообщению приложен файл: InExSu_Macro2_A.xlsb(35.7 Kb)


На сохранение второго закона термодинамики: яндекс.кошелёк 410012113235839
 
Ответить
Сообщение
прописаны в макросе

Во вложении

Автор - InExSu
Дата добавления - 20.02.2019 в 23:27
Гордей Дата: Четверг, 21.02.2019, 01:09 | Сообщение № 12
Группа: Пользователи
Ранг: Новичок
Сообщений: 32
Репутация: 0 ±
Замечаний: 0% ±

Excel 2007
Во вложении


Спасибо! Всё замечательно. Буду юзать две кнопки) Одну с макросом от Бороды, когда нужно зацикливать поиск, и вторую с Вашим макросом, когда нужно будет доходить до последнего найденного и останавливаться.

Ещё раз огромное спасибо вам!!! Вы настоящие Профи!!!
 
Ответить
Сообщение
Во вложении


Спасибо! Всё замечательно. Буду юзать две кнопки) Одну с макросом от Бороды, когда нужно зацикливать поиск, и вторую с Вашим макросом, когда нужно будет доходить до последнего найденного и останавливаться.

Ещё раз огромное спасибо вам!!! Вы настоящие Профи!!!

Автор - Гордей
Дата добавления - 21.02.2019 в 01:09
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Поиск в столбце по нескольким условиям (Макросы/Sub)
  • Страница 1 из 1
  • 1
Поиск:

Яндекс цитирования
© 2010-2019 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!