我试图从下到上找到所有值“O”。我不能使用“正常”的发现,因为我要去offset
一些值,.Find()
会再找到它们。
问题是,当我使用.FindNext
与.Find()
之后使用SearchDirection:=xlPrevious
时,它会回到顶部而不是跟随方向。
出于测试目的,我正在使用此代码:
Dim f As Range
Set ws = ThisWorkbook.ActiveSheet
ws.Cells(7, 5).Value = "O"
ws.Cells(6, 5).Value = "O"
ws.Cells(5, 5).Value = "O"
ws.Cells(5, 6).Value = "O"
ws.Cells(5, 7).Value = "O"
Set f = ws.Range("A1:AX50").Find(what:="O", SearchDirection:=xlPrevious)
Debug.Print f.Address
Set f = ws.Range("A1:AX50").FindNext(f)
Debug.Print f.Address
它打印$E$7
和$E$5
。我期待着$E$7
和$E$6
。
我不确定这是从下到上查找所有值的最佳方法。任何帮助都会受到重视。
Range.FindNext method显然没有继承SearchDirection:= xlPrevious参数。您需要使用基数Range.Find method和After:= f参数。
Dim f As Range, addr As String, ws As Worksheet
Set ws = ThisWorkbook.ActiveSheet
ws.Cells(7, 5).Value = "O"
ws.Cells(6, 5).Value = "O"
ws.Cells(5, 5).Value = "O"
ws.Cells(5, 5).Value = "O"
ws.Cells(5, 6).Value = "O"
ws.Cells(5, 7).Value = "O"
With ws.UsedRange.Cells 'Range("A1:AX50")
Set f = .Find(What:="O", after:=.Cells(1), SearchDirection:=xlPrevious, SearchOrder:=xlByRows)
If Not f Is Nothing Then
addr = f.Address(0, 0)
Do
Debug.Print f.Address
Set f = .Find(What:="O", after:=f, SearchDirection:=xlPrevious, SearchOrder:=xlByRows)
Loop Until addr = f.Address(0, 0)
End If
End With