从Discontinues Range First和Last Cell Addres中提取

时间:2015-08-15 20:49:39

标签: vba range cell extract

有一个不连续的范围对象:
     Range("$C$3:$C$5,$C$100:$C$64000")

如何获得它的第一个和最后一个单元格? firstCell = ("C1")
lastCell = ("C64000")

对该范围内的任何单元格进行填充可能是空白的,甚至是隐藏的?

从我这边来的首选方法是使用像#34;最后一个单元","第一个单元"或类似的,避免正则表达式或循环,但有这样的属性?或获取此类信息的方法?

1 个答案:

答案 0 :(得分:0)

当您使用非连续的单元格时,您必须使用他们的Range.Areas property。通过使用Range.SpecialCells methodxlCellTyp将联合范围削减到可见单元格和非空白(例如常量),您可以处理第一个或最后一个区域以获取您要查找的属性。 / 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是否会被视为“最后一个单元格”,但您只是引用了一个列,因此该点对于时刻。