excel - 使用VBA选择 "Find"的第二个结果

标签 excel vba find

我正在尝试这样做,以便我可以找到“lights”的第二个结果,以防该术语出现各种情况。下面的代码查找所考虑范围内的第一个匹配项。

    Dim ws As Worksheet
    Dim rng1 As Range
    Dim y As Range

     Columns("B:B").Select
Selection.Find(What:="1", After:=ActiveCell, LookIn:=xlValues, LookAt:= _
    xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False _
    , SearchFormat:=False).Select
    Set x = Range(Selection, Selection.End(xlDown)).Offset(0, 3)
    Range(x.Address(0, 0)).Select
    Selection.Find(What:="Lights", After:=ActiveCell, LookIn:=xlValues, LookAt:= _
    xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False _
    , SearchFormat:=False).Activate

      Selection.FindNext(After:=ActiveCell).Activate
      Selection.FindNext(After:=ActiveCell).Select

最佳答案

FindNext 提供您想要的内容。使用它很简单:像现在一样执行第一次搜索(尽管将结果分配给 Range),并将结果范围作为 FindNext 的起点。这里有一个适合您的特定要求的示例代码(secondAddress 是第二次出现“Light”的Address(如果有)):

   Dim foundRange As Range
   Dim rangeToSearch As Range
   Set rangeToSearch = Selection
   Set foundRange = rangeToSearch.Find(What:="Lights", After:=ActiveCell, LookIn:=xlValues, LookAt:= _
    xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False _
    , SearchFormat:=False) 'First Occurrence

     Dim secondAddress As String
    If (Not foundRange Is Nothing) Then
        foundRange.Activate
        Dim count As Integer: count = 0
        Dim targetOccurrence As Integer: targetOccurrence = 2
        Dim found As Boolean

        Do While Not found
            Set foundRange = rangeToSearch.FindNext(foundRange)
            If Not foundRange Is Nothing Then
                count = count + 1
                If (count >= targetOccurrence - 1) Then
                    secondAddress = foundRange.Address
                    Exit Do
                End If
            Else
               Exit Do
            End If
        Loop
  End If

关于excel - 使用VBA选择 "Find"的第二个结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18402800/

相关文章:

HTML 导出到 Excel,mso-data-placement : same-cell loses the line break

vba - 使用公式中的最后一行计数

vba - 将带有路径的excel文件中的列导入数组

vba - Excel 宏 : Copy data into new worksheet and sort base on date and random number

excel - 删除工作簿中每个数据透视表的筛选器

sql - copyFromRecordset 正在更改其他工作表中的格式

excel - excel 2007 中的数据验证

linux - 如何使用 find -exec 删除部分文件扩展名

excel - 查找Excel单元格中重复出现的单词的频率和位置

Linux:如何从文件名中提取信息?