特定列的Excel VBA查找方法

时间:2017-05-28 12:44:32

标签: excel vba excel-vba

当我尝试在特定列中搜索值时,

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指定搜索方向无济于事

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

正如我所知,如果需要找到的值包含在合并单元格中,则Find方法无法正常工作,而查找方法仅适用于最左侧列,其中包含该合并单元格的一部分。为了使我的VBA代码正常工作,一些额外的合并检查,以及随后的搜索区域扩展就是答案

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