Как найти значение в столбце excel с помощью кода vba. Cells.Find
Мне нужно найти значение celda в листе Excel. Я использовал этот код vba, чтобы найти его:
Set cell = Cells.Find(What:=celda, After:=ActiveCell, LookIn:= _
xlFormulas, LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:= _
xlNext, MatchCase:=False, SearchFormat:=False)
If cell Is Nothing Then
'do it something
Else
'do it another thing
End If
Проблема в том, что мне нужно найти значение только в столбце excel. Я нахожу его со следующим кодом:
Columns("B:B").Select
Selection.Find(What:="VA22GU1", After:=ActiveCell, LookIn:=xlFormulas, _
LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
MatchCase:=False, SearchFormat:=False).Activate
Но я не знаю, как адаптировать его к первому vba-коду, потому что мне нужно использовать значение nothing
.
Ответы
Ответ 1
Просто используйте
Dim Cell As Range
Columns("B:B").Select
Set cell = Selection.Find(What:="celda", After:=ActiveCell, LookIn:=xlFormulas, _
LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
MatchCase:=False, SearchFormat:=False)
If cell Is Nothing Then
'do it something
Else
'do it another thing
End If
Ответ 2
Просто для полноты, вы также можете использовать тот же метод выше с таблицами excel.
В приведенном ниже примере я просматриваю текст в любой ячейке таблицы Excel с именем "tblConfig", размещаю в листе с именем Config, который обычно устанавливается как скрытый. Я принимаю значения по умолчанию метода Find.
Dim list As ListObject
Dim config As Worksheet
Dim cell as Range
Set config = Sheets("Config")
Set list = config.ListObjects("tblConfig")
'search in any cell of the data range of excel table
Set cell = list.DataBodyRange.Find(searchTerm)
If cell Is Nothing Then
'when information is not found
Else
'when information is found
End If
Ответ 3
Dim strFirstAddress As String
Dim searchlast As Range
Dim search As Range
Set search = ActiveSheet.Range("A1:A100")
Set searchlast = search.Cells(search.Cells.Count)
Set rngFindValue = ActiveSheet.Range("A1:A100").Find(Text, searchlast, xlValues)
If Not rngFindValue Is Nothing Then
strFirstAddress = rngFindValue.Address
Do
Set rngFindValue = search.FindNext(rngFindValue)
Loop Until rngFindValue.Address = strFirstAddress
Ответ 4
Я бы предпочел использовать метод .Find
непосредственно для объекта диапазона, содержащего диапазон ячеек для поиска. Исходный код плаката может выглядеть следующим образом:
Set cell = ActiveSheet.Columns("B:B").Find( _
What:=celda, _
After:=ActiveCell _
LookIn:=xlFormulas, _
LookAt:=xlWhole, _
SearchOrder:=xlByRows, _
SearchDirection:=xlNext, _
MatchCase:=False, _
SearchFormat:=False _
)
If cell Is Nothing Then
'do something
Else
'do something else
End If
Я бы предпочел использовать больше переменных (и обязательно их объявлять) и позволить множеству необязательных аргументов использовать их значения по умолчанию:
Dim rng as Range
Dim cell as Range
Dim search as String
Set rng = ActiveSheet.Columns("B:B")
search = "String to Find"
Set cell = rng.Find(What:=search, LookIn:=xlFormulas, LookAt:=xlWhole, MatchCase:=False)
If cell Is Nothing Then
'do something
Else
'do something else
End If
Я держал LookIn:=
, LookAt::=
и MatchCase:=
в явном виде о том, что сопоставляется. Другие необязательные параметры определяют, в каком порядке возвращаются совпадения - я бы указывал их, только если порядок важен для моего приложения.