有一个不连续的范围对象:
Range("$C$3:$C$5,$C$100:$C$64000")
如何获得它的第一个和最后一个单元格?
firstCell = ("C1")
lastCell = ("C64000")
对该范围内的任何单元格进行填充可能是空白的,甚至是隐藏的?
从我这边来的首选方法是使用像#34;最后一个单元","第一个单元"或类似的,避免正则表达式或循环,但有这样的属性?或获取此类信息的方法?
答案 0 :(得分:0)
当您使用非连续的单元格时,您必须使用他们的Range.Areas property。通过使用Range.SpecialCells method和xlCellTyp将联合范围削减到可见单元格和非空白(例如常量),您可以处理第一个或最后一个区域以获取您要查找的属性。 / p>
Sub main()
Dim firstCell As Range, lastCell As Range
Set firstCell = first_non_blank_visible_cell(Range("$C$3:$C$5,$C$100:$C$64000"))
Set lastCell = last_non_blank_visible_cell(Range("$C$3:$C$5,$C$100:$C$64000"))
Debug.Print firstCell.Address
Debug.Print lastCell.Address
End Sub
Function first_non_blank_visible_cell(rng As Range)
On Error Resume Next
Set rng = rng.SpecialCells(xlCellTypeVisible)
Set rng = rng.SpecialCells(xlCellTypeConstants)
With rng.Areas(1)
Set first_non_blank_visible_cell = .Cells(1)
End With
End Function
Function last_non_blank_visible_cell(rng As Range)
On Error Resume Next
Set rng = rng.SpecialCells(xlCellTypeVisible)
Set rng = rng.SpecialCells(xlCellTypeConstants)
With rng.Areas(rng.Areas.Count)
Set last_non_blank_visible_cell = .Cells(.Cells.Count)
End With
End Function
我找了xlCellTypeConstants,因为你指定了非空格和公式不留空格;他们留下零长度的字符串。如果涉及公式,则可能需要进行一些小修改以合并xlCellTypeFormulas。
如果您的非连续范围包含类似D8:X8的内容,则可能会讨论X8或C64000是否会被视为“最后一个单元格”,但您只是引用了一个列,因此该点对于时刻。