這篇文章給大家講一下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+↓同時按下什麼效果的,可以參考下面的動畫。
一般我們這麼來用:單元格表達式.End (Direction) ,而這個Direction參數就是方向參數,我們可以選擇下面四個鐘的一個。
利用這個特性,我們就可以尋找A列已使用的最大行號:
Cells(Rows.Count, 1).End(xlUp).Row
這下子一定恍然大悟,原來開頭代碼中的Cells(Rows.Count, b).End(xlUp),是獲取的b列的已使用單元格的最大行號。
持續關注,更多Excel以及VBA乾貨更新中!
關鍵字: Cells 特別 Application