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

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

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

4 ответов


если вы хотите сделать это без 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, но они придирчивы и иногда бросают бессмысленные ошибки. The FOR петля довольно надежна.


метод find диапазона быстрее, чем использование цикла 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

простой в использовании Match

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

попробуйте добавить WorksheetFunction:

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