найти заданное значение на другом листе

Автор Илья, 19 августа 2014, 10:41

Илья

Здравствуйте.
Подскажите пример кода VBA, который ищет заданное значение в заданном диапазоне на другом листе книги.

Администратор

Илья, т.к. в VBA для одной и той же задачи могут использоваться различные инструменты, то нужно уточнить Ваше задание.

Есть два варианта:

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

Какой у Вас вариант?

Илья

Я планирую найти на Excel-листе только одно значение и, отступив от него, скажем, 2 ячейки вправо, получить другое, для дальнейших действий.

Администратор

Илья, вопрос в ответе #2 двузначный, поэтому ещё уточню.
После того, как будет найдено значение, будет сделан отступ, затем макросу не надо будет повторить эти действия для других данных?

Илья

Возможно я не понял вопроса.
При необходимости, макрос будет запускаться сначала, меняться будет только искомое значение и, как следствие, значение после отступа.

Администратор

Макрос, записанный ниже, ищет на втором листе, в диапазоне 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
[свернуть]

Илья