Подтвердить что ты не робот

Проверьте, существует ли значение в столбце в VBA

У меня есть столбец из более чем 500 строк. Мне нужно использовать VBA, чтобы проверить, соответствует ли переменная X любому из значений в столбце.

Кто-нибудь может помочь мне?

4b9b3361

Ответ 1

Если вы хотите сделать это без VBA, вы можете использовать комбинацию IF, ISERROR и MATCH.

Итак, если все значения находятся в столбце A, введите эту формулу в столбец B:

=IF(ISERROR(MATCH(12345,A:A,0)),"Not Found","Value found on row " & MATCH(12345,A:A,0))

Это будет искать значение "12345" (которое также может быть ссылкой на ячейку). Если значение не найдено, MATCH возвращает "# N/A" и ISERROR пытается поймать это.

Если вы хотите использовать VBA, самый быстрый способ - использовать цикл FOR:

Sub FindMatchingValue()
    Dim i as Integer, intValueToFind as integer
    intValueToFind = 12345
    For i = 1 to 500    ' Revise the 500 to include all of your values
        If Cells(i,1).Value = intValueToFind then 
            MsgBox("Found value on row " & i)
            Exit Sub
        End If
    Next i

    ' This MsgBox will only show if the loop completes with no success
    MsgBox("Value not found in the range!")  
End Sub

Вы можете использовать функции листа в VBA, но они придирчивы и иногда бросают бессмысленные ошибки. Цикл FOR довольно надежный.

Ответ 2

Метод поиска диапазона быстрее, чем использование цикла for для циклического перемещения всех ячеек вручную.

вот пример использования метода find в vba

Sub Find_First()
Dim FindString As String
Dim Rng As Range
FindString = InputBox("Enter a Search value")
If Trim(FindString) <> "" Then
    With Sheets("Sheet1").Range("A:A") 'searches all of column A
        Set Rng = .Find(What:=FindString, _
                        After:=.Cells(.Cells.Count), _
                        LookIn:=xlValues, _
                        LookAt:=xlWhole, _
                        SearchOrder:=xlByRows, _
                        SearchDirection:=xlNext, _
                        MatchCase:=False)
        If Not Rng Is Nothing Then
            Application.Goto Rng, True 'value found
        Else
            MsgBox "Nothing found" 'value not found
        End If
    End With
End If
End Sub

Ответ 3

Проще всего использовать Match

If Not IsError(Application.Match(ValueToSearchFor, RangeToSearchIn, 0)) Then
    ' String is in range