2017-05-28 46 views
0

当我尝试搜索特定列中的值时,VBA查找方法似乎失败。 此代码Excel VBA查找特定列的方法

Sub TargetR() 
Dim CLL As Range 
Dim TargetRange As Worksheet 
Dim R As Range 

Set CLL = ThisWorkbook.Worksheets(1).Range("J29") 
Set TargetRange = ThisWorkbook.Worksheets(1) 
Set R = TargetRange.Cells.Find(CLL.Value) 

If Not (R Is Nothing) Then 
    Debug.Print R.Address 
Else: Debug.Print "Empty" 
End If 

End Sub 

完美地工作。 虽然通过用关键字报头中的列的限制搜索失败:

Sub Target() 
Dim CLL As Range 
Dim TargetRange As Worksheet 
Dim targetColumn As Range 
Dim sColumn As Range 


Dim R As Range 

Set CLL = ThisWorkbook.Worksheets(1).Range("J29") 
Set TargetRange = ThisWorkbook.Worksheets(1) 
Set sColumn = TargetRange.Cells.Find("This Column") 
Set targetColumn = sColumn.EntireColumn 
Set R = targetColumn.Cells.Find(CLL.Value) 

If Not (R Is Nothing) Then 
    Debug.Print R.Address 
Else: Debug.Print "Empty" 
End If 

End Sub 

通过xlByColunm指定搜索方向没有帮助

+0

是什么'设置sColumn = TargetRange.Cells.Find(“这列”)'给你?你还需要检查'sColumn'是否分配给'targetColumn'之前什么都没有。 –

+0

我刚刚测试了代码。这个对我有用。 BTW'.Find'保留最后的设置。确保您设置所有参数。例如,'LookIn:= xlFormulas,_ LookAt:= xlPart,SearchOrder:= xlByRows,SearchDirection:= xlNext,_ MatchCase:= False,SearchFormat:= False' –

回答

2

尝试下面的代码(该代码作为注释内说明):

Option Explicit 

Sub Target() 

Dim CLL As Range 
Dim TargetRange As Worksheet 
Dim sColumn As Range 
Dim R As Range 

Set CLL = ThisWorkbook.Worksheets(1).Range("J29") 
Set TargetRange = ThisWorkbook.Worksheets(1) 

Set sColumn = TargetRange.Cells.Find("This Column") 
If Not sColumn Is Nothing Then ' <-- make sure Find was successful 
    Set R = sColumn.EntireColumn.Find(what:=CLL.Value, LookIn:=xlValues, lookat:=xlWhole)   
    If Not R Is Nothing Then 
     Debug.Print R.Address 
    Else: Debug.Print "Empty" 
    End If 
Else ' Find failed to find "This Column" 
    MsgBox "Unable to find 'This Column'" 
End If 

End Sub 
0

正如我想的那样,如果需要查找的值包含在合并单元格中,并且Find methoud仅应用于包含该合并单元的一部分的最左列,则Find方法无法正常工作。对于我的VBA代码能够正常工作,一些额外的合并检查,搜索区域的后续扩展他回答

If sColumn.MergeCells Then 
       Set sColumn = Column.Resize(,Column.MergeArea.Columns.Count)