2015-08-15 32 views
0

有一箇中止Range對象:
Range("$C$3:$C$5,$C$100:$C$64000")

如何得到它的第一和最後一個單元格?
firstCell = ("C1")
lastCell = ("C64000")

從中止範圍首先提取和最後一個單元格ADDRES

asumming在該範圍內的任何細胞可能是空白,甚至隱藏?

從我身邊的首選方法是使用像「最後一個單元格」,「第一個單元格」或類似的屬性,並避免正則表達式或循環,但有沒有這樣的屬性?或方法來獲得這樣的信息?

回答

0

當您使用不連續的單元格時,必須使用它們的Range.Areas property。通過使用Range.SpecialCells methodxlCellTyp將聯合範圍縮減爲可見單元格和非空白(例如常量),可以處理第一個或最後一個區域以獲取要查找的屬性。

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是否會被視爲「最後一個單元格」,但您僅引用單個列,此時此刻。

相關問題