Подскажите, плиз, как в коде VBA можно использовать встроенную функцию поиска с листа

Весь MS Office, программирование на Visual Basic for Applications и MS VB

Модератор: Naeel Maqsudov

vladyank
Сообщения: 11
Зарегистрирован: 16 мар 2009, 16:13

Подскажите, плиз, как в коде VBA можно использовать встроенную функцию поиска с листа в Excel?
Аватара пользователя
Aent
Сообщения: 1129
Зарегистрирован: 01 окт 2006, 14:52
Откуда: Saratov,Russia
Контактная информация:

А чем в коде VBA не устраивает метод .Find ?
Андрей Энтелис,
aentelis.livejournal.com
vladyank
Сообщения: 11
Зарегистрирован: 16 мар 2009, 16:13

Aent писал(а):А чем в коде VBA не устраивает метод .Find ?
А как это работает? мне надо на листе искать некоторые значения , поиск по содержимому ячейки на листе....
Аватара пользователя
Aent
Сообщения: 1129
Зарегистрирован: 01 окт 2006, 14:52
Откуда: Saratov,Russia
Контактная информация:

А посмотреть HELP по Range.Find Method ? Там же примеры есть ...
Или
http://www.ozgrid.com/VBA/find-method.htm
В крайнем случае (хотя я не понимаю зачем вам это надо)

Application.WorksheetFunction.Find(arg1,arg2,arg3)
Parameters
Name Required/Optional Data Type Description
- Arg1 Required String The name of the worksheet.
- Arg2 Required String The name of the range.
- Arg3 Optional Variant The name of an argument to refine the search.
Return Value
Double
Андрей Энтелис,
aentelis.livejournal.com
vladyank
Сообщения: 11
Зарегистрирован: 16 мар 2009, 16:13

Понял, спасибо, буду разбираться :D
Аватара пользователя
AlexZZZ
Сообщения: 237
Зарегистрирован: 01 июн 2007, 00:27
Откуда: Москва и область

Извиняюсь, если оффтоп, но мне кажется задать вопрос в этой ветке будет уместно.
Давно интересовал вопрос: с точки зрения хорошего стиля программирования, в каких случаях правильнее будет применить метод ".Find", а в каких, воспользоваться циклом?
С маленькими диапазонами всё понятно. Цикл в этом случае сделать проще и работает он практически мгновенно. Интересуют большие диапазоны, заполненные данными. Насколько метод ".Find" выигрывает во времени в этом случае по сравнению с циклом перебора ячеек? В статье, ссылку на которую привёл Aent, сожалеют, что метод поиска применяют гораздо реже, чем цикл. Значит он эффективнее?
Аватара пользователя
Aent
Сообщения: 1129
Зарегистрирован: 01 окт 2006, 14:52
Откуда: Saratov,Russia
Контактная информация:

AlexZZZ писал(а):Значит он эффективнее?
Практически всегда - да. Вообще, обращение в цикле к большому количеству ячеек - довольно медленный процесс. Когда ячеек несколько (десятков) тысяч тормоза
очень ощутимые просто на выборку очередного значения по .cells(...,...)
Андрей Энтелис,
aentelis.livejournal.com
Tana_L
Сообщения: 13
Зарегистрирован: 21 май 2009, 12:12

Я меня тоже вопрос по методу Find. надо найти в 1-ой колонке значения "999", как определить адрес найденной ячейки, т.е. номер строки?
Аватара пользователя
AlexZZZ
Сообщения: 237
Зарегистрирован: 01 июн 2007, 00:27
Откуда: Москва и область

Код: Выделить всё

Dim iRange As Range
Dim iRow As Long 
Dim iFind As String
iFind = "999" 'Что ищем
    Set iRange = Columns("A:A").Find(What:=iFind)
    If iRange Is Nothing Then
        MsgBox "Ячейка не найдена!"
    Else
        iRow = iRange.Row
        MsgBox "Найденная строка- " & iRow
    End If
А если нужен адрес найденной ячейки, тогда: iRange.Address
SAS888
Сообщения: 156
Зарегистрирован: 16 янв 2008, 08:28

Если одной командой создать массив ячеек, затем в нем искать все, что угодно каким угодно способом, то будет быстрее, чем любой метод, использующий непосредственно ячейки рабочего листа Excel.
Ответить