Здравствуйте.
Подскажите пример кода 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
Спасибо. То, что надо.