Excel:搜索特定列中的文本

时间:2016-06-13 13:21:23

标签: vb.net excel

在Excel工作表中,我搜索一个关键字来标记列的标题,这是一个简单的部分。现在我需要在此列中搜索另一个字符串。关键是同一个字符串也存在于其他列中,但在不同的行中,因此需要忽略这些字符串。我发现这样做的唯一方法是使用此处描述的方法:https://msdn.microsoft.com/en-us/library/office/ff839746.aspx

当我尝试找到这样的字符串时:

Dim moduleCol As Excel.Range = moduleSheet.Cells.Find("Module Naam")
Dim upstreamRow As Integer
With moduleSheet.Range(moduleCol, moduleSheet.Cells(moduleSheet.UsedRange.Row, moduleCol.Column))
    upstreamRow = .Find(upstreamEm).Row
End With

它找到了字符串,但是在错误的列中(因此在错误的行中)。在我的示例表中,我知道我在列D'中搜索,因此出于测试目的,我尝试了:

    Dim upstreamRow As Integer
    Dim testCol As Integer
    With moduleSheet.Range("d1:d500")
        Dim testCell As Excel.Range = .Find(upstreamEm)
        upstreamRow = testCell.Row
        testCol = testCell.Column
    End With

现在根本找不到字符串,即使它存在于此列中(在单元格d14处)。我错过了什么?有没有更好的方法来找到它?

1 个答案:

答案 0 :(得分:1)

这样的事情应该可以解决问题。它将找到第一个值,然后将第二个值的查找范围设置为仅查找找到第一个值的列。显然它需要调整以满足您的需求,但它应该让你到那里。代码下方是我的数据集的屏幕截图:

Sub test()

Dim fVal As String
Dim fRange As Range

fVal = "TEST2"

Set fRange = ActiveSheet.Cells.Find(What:=fVal, LookIn:=xlFormulas, LookAt _
        :=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _
        False, SearchFormat:=False)

If Not fRange Is Nothing Then

    fVal = "B"

    Set fRange = ActiveSheet.Columns(Split(fRange.Address, "$")(1)).Find(What:=fVal, LookIn:=xlFormulas, LookAt _
        :=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _
        False, SearchFormat:=False)

    fRange.Select

End If

End Sub

enter image description here