VBA Excel
241 subscribers
88 photos
23 links
VBA Excel для начинающих. Справка по VBA Excel. Visual Basic for Applications. Справочник. Самоучитель.
Download Telegram
🔍 Метод Find объекта Range
Метод Find позволяет найти первую ячейку в диапазоне, содержащую заданное значение. Это быстрый и удобный способ искать данные на листе, аналогичный Ctrl + F в Excel.

📌 Основные параметры Find
🔹 What – что ищем (обязательный параметр).
🔹 LookIn – где искать (значения, формулы или комментарии).
🔹 LookAt – точное или частичное совпадение.
🔹 SearchOrder – искать по строкам или по столбцам.
🔹 MatchCase – учитывать регистр букв.
🔹 SearchDirection – направление поиска (xlNext – вперёд, xlPrevious – назад).

📌 Примеры

1️⃣ Поиска значения в диапазоне
Sub FindExample()  
Dim cell As Range
Set cell = Range("A1:A100").Find(What:="Иван", LookIn:=xlValues, LookAt:=xlWhole)

If Not cell Is Nothing Then
MsgBox "Найдено в ячейке: " & cell.Address
Else
MsgBox "Значение не найдено!"
End If
End Sub



2️⃣ Поиск с учётом регистра и точного совпадения
Sub FindExactMatch()  
Dim cell As Range
Set cell = Range("A1:A100").Find(What:="ABC", LookAt:=xlWhole, MatchCase:=True)

If Not cell Is Nothing Then
MsgBox "Точное совпадение найдено в " & cell.Address
Else
MsgBox "Совпадений нет!"
End If
End Sub



3️⃣ Поиск в формулах (а не в значениях)
Sub FindInFormulas()  
Dim cell As Range
Set cell = Range("A1:A100").Find(What:="*SUM*", LookIn:=xlFormulas)

If Not cell Is Nothing Then
MsgBox "Формула найдена в " & cell.Address
Else
MsgBox "Формул с таким текстом нет!"
End If
End Sub


Метод Find с What:="*SUM*" нашел формулу =СУММ(A1:A3)

4️⃣ Цикл поиска всех совпадений
Метод Find ищет только первое совпадение. Чтобы найти все вхождения, используем FindNext:
Sub FindAllMatches()  
Dim firstCell As String, cell As Range
Set cell = Range("A1:A100").Find(What:="Иван", LookIn:=xlValues)

If Not cell Is Nothing Then
firstCell = cell.Address
Do
MsgBox "Найдено в: " & cell.Address
Set cell = Range("A1:A100").FindNext(cell)
Loop While Not cell Is Nothing And cell.Address <> firstCell
Else
MsgBox "Значение не найдено!"
End If
End Sub



⚠️ Важно
🔹 Find возвращает только первую найденную ячейку, для остальных используйте FindNext.
🔹 Если поиск не нашёл совпадений, метод вернёт Nothing, поэтому всегда проверяйте If Not cell Is Nothing.
🔹 Если LookAt:=xlWhole, то Find ищет только полные совпадения. Если xlPart, то подстроку в тексте.

💡 Когда использовать?
Для быстрого поиска данных в больших таблицах.
В макросах, где нужно найти конкретную запись и изменить её.
Для анализа данных с повторяющимися значениями.

#VBA #ExcelVBA #Find #FindNext #Range #Поиск
👍1
🔍 Метод FindNext объекта Range
Метод FindNext используется вместе с Find, чтобы найти все вхождения искомого значения в диапазоне.

📌 Как работает FindNext?
🔹 Find ищет первое совпадение.
🔹 FindNext ищет следующее совпадение и т.д.
🔹 Если FindNext снова находит первую ячейку, поиск необходимо завершить.

📌 Примеры

1️⃣ Поиск всех совпадений в заданном диапазоне
Sub FindAllOccurrences()  
Dim firstCell As String, cell As Range
Set cell = Range("A1:A100").Find(What:="Иван", LookIn:=xlValues)

If Not cell Is Nothing Then
firstCell = cell.Address ' Запоминаем первую найденную ячейку
Do
MsgBox "Найдено в: " & cell.Address
Set cell = Range("A1:A100").FindNext(cell) ' Ищем следующее
Loop While cell.Address <> firstCell
Else
MsgBox "Значение не найдено!"
End If
End Sub


2️⃣ Поиск всех совпадений и их выделение цветом
Sub HighlightAllMatches()  
Dim firstCell As String, cell As Range
Set cell = Range("A1:A100").Find(What:="Иван", LookIn:=xlValues)

If Not cell Is Nothing Then
firstCell = cell.Address
Do
cell.Interior.Color = RGB(255, 255, 0) ' Закрашиваем найденную ячейку
Set cell = Range("A1:A100").FindNext(cell)
Loop While cell.Address <> firstCell
End If
End Sub


3️⃣ Поиск с учётом регистра и точного совпадения
Sub FindExactMatch()  
Dim firstCell As String, cell As Range
Set cell = Range("A1:A100").Find(What:="ABC", LookAt:=xlWhole, MatchCase:=True)

If Not cell Is Nothing Then
firstCell = cell.Address
Do
MsgBox "Точное совпадение в " & cell.Address
Set cell = Range("A1:A100").FindNext(cell)
Loop While cell.Address <> firstCell
End If
End Sub


⚠️ Важно
🔹 FindNext продолжает поиск с последней найденной ячейки.
🔹 Если FindNext снова нашёл первую найденную ячейку, поиск необходимо завершить, чтобы не уйти в бесконечный цикл.

💡 Когда использовать?
Если нужно найти все совпадения, а не только первое.
В макросах, где данные обновляются, заменяются или выделяются.
При анализе данных с повторяющимися значениями.

#VBA #ExcelVBA #FindNext #Поиск #Range
👍1