在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处)。我错过了什么?有没有更好的方法来找到它?
答案 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