2013-02-18 2 views
22

Я должен найти значение celda в листе Excel. Я использую этот код VBA, чтобы найти его:Как найти значение в столбце excel по vba-коду Cells.Find

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 

Проблема заключается в том, когда я должен найти значение только в колонке первенствовать. Я нахожу его следующий код:

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.

+6

http://www.siddharthrout.com/2011/07/14/find-and-findnext-in-excel-vba/ Также, пожалуйста, не используйте '.Select' Смотрите эту ссылку HTTP: //stackoverflow.com/questions/10714251/excel-macro-avoiding-using-select/10718179#10718179 –

+0

Если вы просто хотите знать, существует ли значение где-то в диапазоне, оно выполняется быстрее (стоит того, чтобы проверить сотни значения) для использования формулы Excel. Например, если celda является числом, вы можете использовать IF Evaluate («COUNTIF (Sheet1! A1: A1000,« & celda & »)»)> 0 THEN ... – lessthanideal

ответ

32

Просто используйте

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 
4

Просто для полноты картины, вы можете также использовать ту же технику, выше с таблицами 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 
Смежные вопросы