我正在处理一个电子表格,该电子表格可以格式化从应用程序外部提取的报告。我大部分的格式化工作都完成了,但是对于其中的一部分,我只需要选择A9:I Z 范围内的所有单元格,其中Z是直到特定字符串(不包括字符串)的行数本身。)
Here是一个示例表。我需要从A1:I649中选择所有内容,它是单元格A650上方的行,该行始终包含字符串“ *** Total”。该报告是动态的,因此每天都会更改长度,但是我设置了格式,以便“总”始终显示在底部。我只是不知道如何选择所有内容,直到脚本的下一部分。我已经设置了其余代码,我只需要钉住这部分。
我为视觉制作了速记图像。在这种情况下,我需要选择A10:I30作为我的选择范围,因为它是***总计
之前的行。
只需选中它,因为脚本的其余部分将处理其余的格式。
答案 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向下选择所有具有值的内容。