VBA中end(xlup)到底是什麼?

這篇文章給大家講一下VBA中,Range對象的一個特別重要的屬性--END屬性。


相信剛開始學VBA的朋友在代碼中經常遇到end(xlup)這句代碼,而且特別的高頻。


  • 比如說下面一個彙總工作簿的代碼例子。
Sub 把一列中不同項目分拆到不同工作簿()
    Tm = Timer
    Application.DisplayAlerts = False
    Application.ScreenUpdating = False
    Set d = CreateObject("scripting.dictionary")
    a = 1 '//標題行
    b = 1 '//拆分項目所在的列
    arr = Range(Cells(a + 1, b), Cells(Rows.Count, b).End(xlUp))
    For x = 1 To UBound(arr)
        d(arr(x, 1)) = x
    Next
    brr = d.keys
    For i = 0 To UBound(brr)
        Workbooks.Add.SaveAs ThisWorkbook.Path & "" & brr(i)
        With ThisWorkbook.Sheets(1)
            .Rows(a).AutoFilter Field:=b, Criteria1:=brr(i)
            .AutoFilter.Range.SpecialCells(12).Copy Sheets(1).Range("A1")
        End With
        ActiveWorkbook.Close 1
    Next
    ThisWorkbook.Sheets(1).ShowAllData  '消除篩選
    Application.DisplayAlerts = True
    Application.ScreenUpdating = True
    MsgBox "拆分完成,用時:" & Format(Timer - Tm, "0.00秒"), 64, "拆分報表"
End Sub

這段代碼的含義是,按某列對工作簿進行拆分,拆分為單獨的工作簿。需要的朋友也可以直接拿去用。


放眼望去,我看到了這位靚仔end(xlup),他到底是做什麼的?怎麼好多代碼裡都有他在搞事情?!


  • Range.End 屬性 :返回一個 Range 對象,該對象代表源區域的區域尾端的單元格。


官方口吻,聽起來好像有點拗口。說大白話就是:光標放在某個單元格,給他來個end(xlup),相當於同時按下CTRL+↓的效果。


不知道CTRL+↓同時按下什麼效果的,可以參考下面的動畫。

VBA中end(xlup)到底是什麼?

光標起始放在A1單元格,同時按下Ctrl+↓之後,光標跑到了A列已使用的最後一個單元格。


一般我們這麼來用:單元格表達式.End (Direction) ,而這個Direction參數就是方向參數,我們可以選擇下面四個鐘的一個。


VBA中end(xlup)到底是什麼?


利用這個特性,我們就可以尋找A列已使用的最大行號:

Cells(Rows.Count, 1).End(xlUp).Row


這下子一定恍然大悟,原來開頭代碼中的Cells(Rows.Count, b).End(xlUp),是獲取的b列的已使用單元格的最大行號。


持續關注,更多Excel以及VBA乾貨更新中!


分享到:


相關文章: