Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / метод Find VBA / 10 сообщений из 10, страница 1 из 1
24.02.2011, 14:43
    #37133774
Shun
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
метод Find VBA
Подскажите, пожалуйста, есть ли точный поиск?

Нужно на странице найти вот такой элемент "П000020012002:ДИЗЕЛЬНОЕ ТОПЛИВО" но при этом чтобы он находил только его. То есть чтобы он не нашёл например вот такое

"П000020012002:ДИЗЕЛЬНОЕ ТОПЛИВО 3 класса"
Как это можно сделать? Заранее огромное спасибо.

У меня написано так, но при этом он находит по пути все левые элементы +(

Код: plaintext
1.
2.
r.Cells.Find(What:="П000020012002:ДИЗЕЛЬНОЕ ТОПЛИВО", After:=r.Cells( 1 ,  1 ), _
        LookIn:=xlFormulas, LookAt:=xlPart, SearchOrder:=xlByRows, _
        SearchDirection:=xlNext, MatchCase:=False, SearchFormat:=False).Activate
...
Рейтинг: 0 / 0
24.02.2011, 19:46
    #37134507
NikVik
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
метод Find VBA
Попробуйте:
Код: plaintext
1.
2.
r.Cells.Find(What:="П000020012002:ДИЗЕЛЬНОЕ ТОПЛИВО", After:=r.Cells( 1 ,  1 ), _
        LookIn:=xlFormulas, LookAt:=xlWhole, SearchOrder:=xlByRows, _
        SearchDirection:=xlNext, MatchCase:=False, SearchFormat:=False).Activate
...
Рейтинг: 0 / 0
25.02.2011, 07:08
    #37134843
Shun
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
метод Find VBA
Спасибо огромноеее
...
Рейтинг: 0 / 0
16.03.2011, 13:51
    #37167596
romazeka
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
метод Find VBA
А ещё по Find-у!
В скрытых строчка никак нельзя заставть его искать, а то если фильтром подвёрнуто искомое ненаходит?
Если не заставить, то если другой способ быстро искать ячейки с нужными значениями без цыклов?
...
Рейтинг: 0 / 0
16.03.2011, 14:29
    #37167762
The_Prist
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
метод Find VBA
romazekaто если другой способ быстро искать ячейки с нужными значениями без цыклов?А кто сказал, что Find не применяет цикл? Это тот же цикл, только завернутый в короткую для нас функцию.
Быстро будет считать данные с листа в массив и по массиву уже делать цикл. Там будет уже без разницы - скрыты строки или нет.
...
Рейтинг: 0 / 0
16.03.2011, 14:36
    #37167798
romazeka
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
метод Find VBA
The_Pristromazekaто если другой способ быстро искать ячейки с нужными значениями без цыклов?А кто сказал, что Find не применяет цикл? Это тот же цикл, только завернутый в короткую для нас функцию.
Такто конечно да, но встроенные функции работают ГОРАЗДО быстрей
...
Рейтинг: 0 / 0
16.03.2011, 14:55
    #37167855
The_Prist
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
метод Find VBA
romazekaТакто конечно да, но встроенные функции работают ГОРАЗДО быстрейПожалуй не соглашусь. Не все функции дадут фору работе с массивами через VBA. Find не исключение. Порой быстрее будет найти что-то без него. Просто с ним покороче.
Вот, накатал тестовую процедурку. Оцените скорость:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
Sub Find_vs_Array()
    Dim iTimer, avArr, lr As Long, lc As Long, rFndRng As Range
    With Range("A1:AA65536")
        .Formula = "=Row()&Column()"
        .Value = .Value
        avArr = .Value
    End With
    iTimer = Timer
    Set rFndRng = ActiveSheet.UsedRange.Find( 6554023 , , xlValues, xlWhole)
    MsgBox "Время выполнения методом Find: " & Timer - iTimer
    iTimer = Timer
    For lr =  1  To  65536 
        For lc =  1  To  27 
            If avArr(lr, lc) =  6554023  Then
                Exit For
            End If
        Next lc
    Next lr
    MsgBox "Время выполнения wbrkjv: " & Timer - iTimer
End Sub
...
Рейтинг: 0 / 0
16.03.2011, 16:52
    #37168216
romazeka
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
метод Find VBA
Получилось быстрей. Но по-моему опять же за счёт встроенной возможности быстро перенести диапазон в массив :
avArr = .Value
Если бы этот массив заполняли циклом, то скорее всего получись всё не так быстро
...
Рейтинг: 0 / 0
16.03.2011, 16:57
    #37168224
The_Prist
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
метод Find VBA
romazekaПолучилось быстрей. Но по-моему опять же за счёт встроенной возможности быстро перенести диапазон в массив :
avArr = .Value
Если бы этот массив заполняли циклом, то скорее всего получись всё не так быстроЕсли бы циклом заполняли...Тогда да. Но у нас есть возможность этого не делать и ускорить поиск в разы. Но ведь и вопрос не в заполнении был. Вы же сами категорично заявили
авторвстроенные функции работают ГОРАЗДО быстрей
Я просто аргументированно не согласился :-)
...
Рейтинг: 0 / 0
16.03.2011, 17:18
    #37168283
romazeka
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
метод Find VBA
The_PristЕсли бы циклом заполняли...Тогда да. Но у нас есть возможность этого не делать и ускорить поиск в разы.
Ну а за счёт чего мы имеем возможность этого не делать? За счёт встроенных быстрых функций! )
Но ваш пример всё равно оказался полезен, пасиба!
...
Рейтинг: 0 / 0
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / метод Find VBA / 10 сообщений из 10, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]