Проверьте, существует ли значение в столбце в 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