Выражение для команды «Найти» - PullRequest
1 голос
/ 30 апреля 2020

Я хочу использовать команду «Найти» для поиска слова по одной ячейке за раз вместо диапазона ячеек за раз. Я попытался использовать команду «Для каждого», как показано ниже, но она не работает. Можно ли искать слово, используя другие выражения, например, Set rgFound = activecell.Find("John") или Set rgFound = cells(1,1).Find("John")), кроме использования диапазона?

Sub tester()
    Dim rgFound As Range
    Set rng = Columns(1)
    Set rng1 = rng.SpecialCells(xlVisible)

    For Each cell In rng1
        Set rgFound = cell.Find("John")
        If rgFound Is Nothing Then
            MsgBox "Name was not found."
        Else
            MsgBox "Name found in :" & rgFound.Address
        End If
    Next
End Sub

1 Ответ

0 голосов
/ 30 апреля 2020

Для поиска по значению одной отдельной ячейки необходимо использовать функцию InStr

If InStr(1, Range("A1").Value, "John", vbTextCompare) > 0 Then
    'John was found
Else
    'John was not found
End If

InStr, которая возвращает позицию first где John был найден в значении ячейки A1, поэтому, если он возвращает число > 0, в противном случае он не был найден.


В качестве альтернативы вы можете использовать оператор Like :

If Range("A1").Value Like "*John*" Then
    'John was found
Else
    'John was not found
End If

Обратите внимание на окружающие заполнители (* звездочки), чтобы аналогичный оператор распознал John в "any string that conains John in the begining middele or end of the string"

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...