Помогите пожалуйста доделать макросы, чтобы из двух сделать один. Суть такова - есть данные (диапазон C1:C3000), по которым макрос производит поиск (а-ля Ctrl-f) и находит каждое заданное в макросе совпадение после текущей ячейки и останавливается на найденной, выделяя её, затем при новом выполнении макроса следующую найденную ячейку. На данный момент это всё работает, но с помощью двух макросов, а надо бы вообще 3 слова для совпадения. Так как Find не позволяет делать OR, чтобы задать не одно, а несколько искомых слов, и поиск возможных готовых решений в Интернете приводит к очень сложным примерам, то прошу помочь в создании такого макроса вас, уважаемые Гуру VBA.
Цель - один макрос, который в заданном диапазоне построчно просматривает на наличие трёх вариантов, и останавливается на первом из найденных. При следующем запуске макроса он ищет дальше. В прикреплённом файле упростил до 111,222 и тд
Приветствую!
Помогите пожалуйста доделать макросы, чтобы из двух сделать один. Суть такова - есть данные (диапазон C1:C3000), по которым макрос производит поиск (а-ля Ctrl-f) и находит каждое заданное в макросе совпадение после текущей ячейки и останавливается на найденной, выделяя её, затем при новом выполнении макроса следующую найденную ячейку. На данный момент это всё работает, но с помощью двух макросов, а надо бы вообще 3 слова для совпадения. Так как Find не позволяет делать OR, чтобы задать не одно, а несколько искомых слов, и поиск возможных готовых решений в Интернете приводит к очень сложным примерам, то прошу помочь в создании такого макроса вас, уважаемые Гуру VBA.
Цель - один макрос, который в заданном диапазоне построчно просматривает на наличие трёх вариантов, и останавливается на первом из найденных. При следующем запуске макроса он ищет дальше. В прикреплённом файле упростил до 111,222 и тдГордей
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] Можно пойти дальше и искомые значения писать не в коде макроса, а прямо на кнопке, потом макросом оттуда считывать и искать. А кнопок таких несколько штук сделать, для разных поисков. Но макрос на всех этих кнопках будет один Не стал так делать потому, что не знаю, нужно или нет. А просто так неохота время тратить
Такой вариант [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_
Ох.. Спасибо огромное! В представленном Вами варианте работает! На кнопки вешать искомые слова не нужно, они будут всегда статичны и прописаны в самом макросе.
Но после редактирования макроса по свои нужды выяснилось следующее: при поиске по столбцу С, если есть пустые ячейки между данными (а их может быть много) - то макрос почему-то стопорится на одной из ячеек и дальше "не идёт"
В прикреплённом варианте макрос останавливается на 31-й строке, хотя дальше находятся много искомых слов. Посмотрите пожалуйста, уважаемый _Boroda_ :shy:
Ох.. Спасибо огромное! В представленном Вами варианте работает! На кнопки вешать искомые слова не нужно, они будут всегда статичны и прописаны в самом макросе.
Но после редактирования макроса по свои нужды выяснилось следующее: при поиске по столбцу С, если есть пустые ячейки между данными (а их может быть много) - то макрос почему-то стопорится на одной из ячеек и дальше "не идёт"
В прикреплённом варианте макрос останавливается на 31-й строке, хотя дальше находятся много искомых слов. Посмотрите пожалуйста, уважаемый _Boroda_ :shy:
С какой строки мой код менее понятен? А то я, ничтоже сумняшеся, свой код считаю более понятным :-)
Например: в коде Бороды быстро нашёл, где поменять значения искомых слов и задать их кол-во. В Вашем макросе данные для поиска берутся из ячеек, и как их "впихнуть" в макрос (а их 6-7 слов для поиска) - не представляю, потому что не владею VBA. И ещё в Вашем макросе идёт поиск только по данным, пока не встретится пустая ячейка(и). А данные могут быть как угодно по столбцу С распределены, но не более 3000 строк. Скачайте мой файл выше с кодом Бороды - я там его переделал для своих нужд, посмотрите.. Если поправите Ваш макрос, и он будет работать без сюрпризов - супер!
С какой строки мой код менее понятен? А то я, ничтоже сумняшеся, свой код считаю более понятным :-)
Например: в коде Бороды быстро нашёл, где поменять значения искомых слов и задать их кол-во. В Вашем макросе данные для поиска берутся из ячеек, и как их "впихнуть" в макрос (а их 6-7 слов для поиска) - не представляю, потому что не владею VBA. И ещё в Вашем макросе идёт поиск только по данным, пока не встретится пустая ячейка(и). А данные могут быть как угодно по столбцу С распределены, но не более 3000 строк. Скачайте мой файл выше с кодом Бороды - я там его переделал для своих нужд, посмотрите.. Если поправите Ваш макрос, и он будет работать без сюрпризов - супер!Гордей
Сообщение отредактировал Гордей - Среда, 20.02.2019, 21:11
Вроде без сюрпризов работает код. Только не пойму, как переделать код так, чтобы данные для поиска были жёстко прописаны в макросе, а не брались из ячеек столба 1
Вроде без сюрпризов работает код. Только не пойму, как переделать код так, чтобы данные для поиска были жёстко прописаны в макросе, а не брались из ячеек столба 1Гордей
Спасибо! Всё замечательно. Буду юзать две кнопки) Одну с макросом от Бороды, когда нужно зацикливать поиск, и вторую с Вашим макросом, когда нужно будет доходить до последнего найденного и останавливаться.
Ещё раз огромное спасибо вам!!! Вы настоящие Профи!!!
Спасибо! Всё замечательно. Буду юзать две кнопки) Одну с макросом от Бороды, когда нужно зацикливать поиск, и вторую с Вашим макросом, когда нужно будет доходить до последнего найденного и останавливаться.
Ещё раз огромное спасибо вам!!! Вы настоящие Профи!!!Гордей