excel - 如何找到使用 VBA 匹配的范围内的最后一行单元格?

标签 excel vba

表中有一列显示工厂名称,但我只需要特定工厂名称的数据(假设工厂“澳大利亚”)。

我的想法是找到匹配的第一行和最后一行,因为同一工厂的数据总是以连续的方式呈现。这样,我可以获得与我的搜索相匹配的单元格范围。

找到第一个匹配的行位置非常容易,但我在获取最后一个匹配的行位置时遇到了困难。

这是关于这部分的代码:

Sub Search()

Dim sh As Worksheet
Dim searchStr As String
Dim lastRow As Long, firstRow as Long
Dim tableRange As range

Set sh = Worksheets("Total order")
searchStr = "Australia"
Set tableRange = sh.range("B:B").Find(what:=searchStr, LookIn:=xlValues, lookat:=xlWhole)
firstRow = tableRange.Row

End Sub

处理的表格示例:

enter image description here

最佳答案

引用某列中字符串第一次出现的单元格到最后一次出现的单元格的范围

旁注

  • Range.Find method有点棘手。例如,您可能没有意识到在您的代码中搜索是从单元格 B2 开始的(在这种情况下更可取),并且使用 xlValues 可能会导致不希望的结果如果行被隐藏(可能不重要)。

用法

  • 使用该函数,根据屏幕截图,您可以(在 searchStr = "Australia" 之后)使用:

    Set tableRange = refRangeFirstLast(sh.Columns("B"), searchStr)
    

    引用范围 B4:B7,或使用:

    Set tableRange = refRangeFirstLast(sh.Columns("B"), searchStr).Offset(, -1).Resize(, 4)
    

    引用范围A4:D7

代码

Function refRangeFirstLast( _
    ByVal ColumnRange As Range, _
    ByVal SearchString As String) _
As Range
    If Not ColumnRange Is Nothing Then
        With ColumnRange
            Dim FirstCell As Range: Set FirstCell = _
                .Find(SearchString, .Cells(.Cells.Count), xlFormulas, xlWhole)
            If Not FirstCell Is Nothing Then
                Dim LastCell As Range: Set LastCell = _
                    .Find(SearchString, , xlFormulas, xlWhole, , xlPrevious)
                Set refRangeFirstLast = .Worksheet.Range(FirstCell, LastCell)
            End If
        End With
    End If
End Function

Sub refRangeFirstLastTEST()
    Const SearchString As String = "Australia"
    Dim ColumnRange As Range
    Set ColumnRange = ThisWorkbook.Worksheets("Total order").Columns("B")
    Dim rg As Range: Set rg = refRangeFirstLast(ColumnRange, SearchString)
    If Not rg Is Nothing Then
        Debug.Print rg.Address
    Else
        MsgBox "The reference could not be created.", vbExclamation, "Fail?"
    End If
End Sub

关于excel - 如何找到使用 VBA 匹配的范围内的最后一行单元格?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66407077/

相关文章:

vba - "Can' t 分配给数组”编译错误

Excel VBA : Active Selection as a Named Range for Pivot Table Data Source

python - 使用 xlsxwriter 模块将列表中的数据写入 Excel 工作表中的列

vba - 返回表示工作表行的字符串的函数

vba - 如何将 stdole.StdPicture 转换为其他类型?

excel - 使用 VBA 映射 SharePoint 驱动器

vba - 选择案例循环

java - Apache POI 日期区域设置问题

excel - 如何使用 TCL 在 Excel 中读取 "ó"等特殊字符?

Excel Pivot - 给定范围内不同值的计数