У меня есть столбец из более чем 500 строк. Мне нужно использовать VBA, чтобы проверить, соответствует ли переменная X любому из значений в столбце.
Кто-нибудь может помочь мне?
У меня есть столбец из более чем 500 строк. Мне нужно использовать VBA, чтобы проверить, соответствует ли переменная X любому из значений в столбце.
Кто-нибудь может помочь мне?
Если вы хотите сделать это без 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
довольно надежный.
Метод поиска диапазона быстрее, чем использование цикла 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