Форум по VBA и MS Office

VBA, Excel => VBA, макросы в Excel => Тема начата: Илья от 19 августа 2014, 10:41

Название: найти заданное значение на другом листе
Отправлено: Илья от 19 августа 2014, 10:41
Здравствуйте.
Подскажите пример кода VBA, который ищет заданное значение в заданном диапазоне на другом листе книги.
Название: Re: найти заданное значение на другом листе
Отправлено: Администратор от 19 августа 2014, 12:43
Илья, т.к. в VBA для одной и той же задачи могут использоваться различные инструменты, то нужно уточнить Ваше задание.

Есть два варианта:
Если нужно найти только одно значения, то можно использовать один инструмент. А если понадобится искать несколько значений, то нужно будет использовать другой инструмент, чтобы макрос работал быстро.

Какой у Вас вариант?
Название: Re: найти заданное значение на другом листе
Отправлено: Илья от 19 августа 2014, 12:50
Я планирую найти на Excel-листе только одно значение и, отступив от него, скажем, 2 ячейки вправо, получить другое, для дальнейших действий.
Название: Re: найти заданное значение на другом листе
Отправлено: Администратор от 19 августа 2014, 12:54
Илья, вопрос в ответе #2 двузначный, поэтому ещё уточню.
После того, как будет найдено значение, будет сделан отступ, затем макросу не надо будет повторить эти действия для других данных?
Название: Re: найти заданное значение на другом листе
Отправлено: Илья от 19 августа 2014, 14:24
Возможно я не понял вопроса.
При необходимости, макрос будет запускаться сначала, меняться будет только искомое значение и, как следствие, значение после отступа.
Название: Re: найти заданное значение на другом листе
Отправлено: Администратор от 19 августа 2014, 14:41
Макрос, записанный ниже, ищет на втором листе, в диапазоне A1:C3 текст "Искомый текст" по полному совпадению.

Макрос
Sub Макрос1()

    Dim rngFind As Excel.Range
   
   
    'Параметры команды "Find" получены с помощью макрорекордера и изменены мной.
    'У команды "Find" нужно указывать все параметры, т.к. команда "Find"
        'связана с Excel-окном "Найти и заменить". И если не указать какой-то параметр,
        'то параметр может быть подставлен из окна "Найти и заменить" и макрос
        'может дать неправильный результат.
    'Если будет найдено, то найденной ячейке будет присвоено VBA-имя "rngFind".
        'С помощью этого имени можно воздействовать на найденную ячейку.
    ' LookAt:=xlWhole - ищется полное совпадение.
    Set rngFind = Worksheets(2).Range("A1:C3").Find(What:="Искомый текст", LookIn:=xlValues, _
        LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False, SearchFormat:=False)
   
    'Если не найдено, то в переменной "rngFind" будет слово "Nothing".
    If rngFind Is Nothing Then
        MsgBox "Не найдено.", vbExclamation
        Exit Sub
    End If
   
    'Offset позволяет обратиться к нужной ячейке относительно другой ячейки.
    'Offset(0, 2) - обращение к ячейке, которая находится в той же строки, но вправо на два столбца.
    MsgBox rngFind.Offset(0, 2).Value
   
End Sub
[свернуть]
Название: Re: найти заданное значение на другом листе
Отправлено: Илья от 19 августа 2014, 16:57
Спасибо. То, что надо.