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

Как найти значение в столбце 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.

4b9b3361

Ответ 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:= в явном виде о том, что сопоставляется. Другие необязательные параметры определяют, в каком порядке возвращаются совпадения - я бы указывал их, только если порядок важен для моего приложения.