2017-06-20 152 views
0

我现在有一个排序的列,看起来是这样的:找到最后一个索引 - VBA

  Cat 
      Cat 
      Cat 
      Cat 
      Dog 
      Dog 
      Dog 
      Dog 

我想找到猫的最后一个索引(在这种情况下是4)和狗(在这种情况下是8的最后一个索引)

我试过如下:

Dim Last_Index_F As Long 

With Sheets("Sheet1") 
    Last_Index_F = Range("A:A").Find(what:="Cat", after:=Range("A2"), searchdirection:=x1Previous).row 
End With 

MsgBox (Last_Index_F) 

但我发现了猫的A2之后到来的第一个索引。有任何想法吗?

回答

2

的代码会是这样。

Sub test() 
    Dim Last_Index_F As Long 
    Dim Ws As Worksheet 
    Dim rngDB As Range, rngF As Range 
    Dim strAddress As String, n As Long 
    Dim vR() 

    Set Ws = Sheets("Sheet1") 
    With Ws 
     Set rngDB = .Range("a1", .Range("a" & Rows.Count).End(xlUp)) 
    End With 
    With rngDB 
     Set rngF = .Find("Cat", after:=.Cells(.Rows.Count), LookIn:=xlValues, Lookat:=xlWhole) 
     If rngF Is Nothing Then 
     Else 
      strAddress = rngF.Address 
      Do 
       n = n + 1 
       ReDim Preserve vR(1 To n) 
       vR(n) = rngF.Row 
       Set rngF = .FindNext(rngF) 
      Loop While strAddress <> rngF.Address 
     End If 
    End With 
    MsgBox WorksheetFunction.Max(vR) 
    MsgBox vR(n) 

End Sub 
+0

r = .Cells.Find(“Cat”,SearchOrder:= xlByRows,SearchDirection:= xlPrevious).Row是一样的。 –

0

您只需将您的“之后”移动到您正在搜索的列的末尾。

在我的例子我刚刚发现列的最后使用的A行

Dim Last_Index_F As Long 


With Sheets("Sheet1") 
    LastRow = Range("A" & Rows.Count).End(xlUp).Row 
    Last_Index_F = Range("A:A").Find(what:="Cat", after:=Range("A" & LastRow), searchdirection:=xlPrevious).Row 
End With 

MsgBox (Last_Index_F) 
相关问题