📌  相关文章
📜  excel "vba" 匹配最后一个值 - VBA (1)

📅  最后修改于: 2023-12-03 15:00:38.139000             🧑  作者: Mango

Excel VBA匹配最后一个值

在Excel中,我们经常需要根据某些条件来查找数据中的最后一个匹配项。在VBA中,我们可以使用一些方法来实现这个目标。

1. 使用Range.Find方法

Range.Find方法是Excel VBA中用于查找特定内容的方法。在该方法中,我们可以指定要查找的值、起始位置、查找方向等等。通过指定查找方向为xlPrevious,我们可以实现查找最后一个匹配项的目的。

以下是一个示例代码:

Sub FindLastMatch()
    Dim searchRange As Range
    Dim lastMatch As Range
    
    ' 设置查找范围
    Set searchRange = Range("A1:A10")
    
    ' 查找最后一个匹配项
    Set lastMatch = searchRange.Find(What:="apple", _
                                      After:=searchRange.Cells(searchRange.Cells.Count), _
                                      LookIn:=xlValues, _
                                      LookAt:=xlWhole, _
                                      SearchOrder:=xlByRows, _
                                      SearchDirection:=xlPrevious, _
                                      MatchCase:=False)
                                      
    ' 如果找到最后一个匹配项,则输出该单元格地址
    If Not lastMatch Is Nothing Then
        Debug.Print lastMatch.Address
    Else
        Debug.Print "No match found."
    End If
End Sub

在上面的代码中,我们首先定义了一个Range对象searchRange作为要查找的范围。然后,我们使用Range.Find方法来查找最后一个匹配项。注意,在指定起始位置时,我们将其设置为查找范围中最后一个单元格的下一个单元格。最后,我们判断是否找到了最后一个匹配项,如果找到了,则输出其单元格地址。

2. 使用Excel函数

除了使用VBA代码之外,我们还可以使用Excel中的一些函数来查找最后一个匹配项。其中,MATCH函数和LOOKUP函数都可以实现这个目标。

下面是一个使用MATCH函数的示例代码:

Sub FindLastMatch()
    Dim searchRange As Range
    Dim lastMatchIndex As Long
    Dim lastMatchCell As Range
    
    ' 设置查找范围
    Set searchRange = Range("A1:A10")
    
    ' 使用MATCH函数查找最后一个匹配项的索引
    lastMatchIndex = Application.Match("apple", searchRange, 0)
    
    ' 如果找到最后一个匹配项,则输出该单元格地址
    If Not IsError(lastMatchIndex) Then
        Set lastMatchCell = searchRange(lastMatchIndex)
        Debug.Print lastMatchCell.Address
    Else
        Debug.Print "No match found."
    End If
End Sub

在上面的代码中,我们使用了MATCH函数来查找最后一个匹配项的索引。由于MATCH函数默认返回第一个匹配项的索引,我们需要在函数的第三个参数中将其设置为0(即查找最后一个匹配项)。然后,我们判断是否找到了最后一个匹配项,并输出其单元格地址。

除了MATCH函数之外,我们还可以使用LOOKUP函数来查找最后一个匹配项。下面是一个使用LOOKUP函数的示例代码:

Sub FindLastMatch()
    Dim searchRange As Range
    Dim lastMatch As Variant
    
    ' 设置查找范围
    Set searchRange = Range("A1:A10")
    
    ' 使用LOOKUP函数查找最后一个匹配项
    lastMatch = Application.Lookup(2, 1 / (searchRange = "apple"), searchRange)
    
    ' 如果找到最后一个匹配项,则输出其单元格地址
    If Not IsError(lastMatch) Then
        Debug.Print searchRange(lastMatch).Address
    Else
        Debug.Print "No match found."
    End If
End Sub

在上面的代码中,我们使用了LOOKUP函数来查找最后一个匹配项。具体来说,我们将要查找的值("apple")除以查找范围中的单元格,并将结果传递给LOOKUP函数的第二个参数。这样,我们就可以得到每个匹配项在范围中的位置。然后,我们将结果传递给LOOKUP函数的第三个参数,以便找到对应的单元格。最后,我们判断是否找到了最后一个匹配项,并输出其单元格地址。