选择“ Range up up”直到特定字符串VBA

时间:2018-10-04 15:29:30

标签: excel-vba

我正在处理一个电子表格,该电子表格可以格式化从应用程序外部提取的报告。我大部分的格式化工作都完成了,但是对于其中的一部分,我只需要选择A9:I Z 范围内的所有单元格,其中Z是直到特定字符串(不包括字符串)的行数本身。)

Here是一个示例表。我需要从A1:I649中选择所有内容,它是单元格A650上方的行,该行始终包含字符串“ *** Total”。该报告是动态的,因此每天都会更改长度,但是我设置了格式,以便“总”始终显示在底部。我只是不知道如何选择所有内容,直到脚本的下一部分。我已经设置了其余代码,我只需要钉住这部分。

我为视觉制作了速记图像。在这种情况下,我需要选择A10:I30作为我的选择范围,因为它是***总计

之前的行。

只需选中它,因为脚本的其余部分将处理其余的格式。

2 个答案:

答案 0 :(得分:1)

尝试

dim rng as range, m as variant

with worksheets("sheet1")
    m = application.match("~*~*~*total", .range("I:I"), 0)
    if not iserror(m) then
        set rng = .range(.cells(9, "A"), .cells(m - 1, "I"))
        debug.print rng.address(0, 0)
        rng.select
    end if
end with

请注意用于删除星号通配符的转义字符(~或代字号)。

答案 1 :(得分:0)

我设法解决了。可能有点草率,但是可以用:

Sub LeanCut()
Dim lrow As Long
'This part is finding the cell with "~~~ Total" and deleting it and everything below       
Cells.Find(What:="~*~*~* Total", After:=[A1], LookIn:=xlFormulas, _
        LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
        MatchCase:=False).Activate
        Rows(ActiveCell.Row & ":" & Rows.Count).Delete
'This part just selects everything from A10:I (last row with data)
lrow = Cells(Cells.Rows.Count, "A").End(xlUp).Row
Range("A10:I" & lrow).Select

End Sub

就像我说的那样,这有点草率,但是无论如何我都不是VBA的最佳人选,它确实达到了我的预期。只需将***总计放入一个空行,然后从A10向下选择所有具有值的内容。