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+↓同時按下什麼效果的,可以參考下面的動畫。

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


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



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

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


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


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