这篇文章给大家讲一下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),他到底是做什么的?怎么好多代码里都有他在搞事情?!



官方口吻,听起来好像有点拗口。说大白话就是:光标放在某个单元格,给他来个end(xlup),相当于同时按下CTRL ↓的效果。


不知道CTRL ↓同时按下什么效果的,可以参考下面的动画。

vba next如何使用(VBA中endxlup到底是什么)(1)

光标起始放在A1单元格,同时按下Ctrl ↓之后,光标跑到了A列已使用的最后一个单元格。


一般我们这么来用:单元格表达式.End (Direction) ,而这个Direction参数就是方向参数,我们可以选择下面四个钟的一个。


vba next如何使用(VBA中endxlup到底是什么)(2)


利用这个特性,我们就可以寻找A列已使用的最大行号:

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


这下子一定恍然大悟,原来开头代码中的Cells(Rows.Count, b).End(xlUp),是获取的b列的已使用单元格的最大行号。


持续关注,更多Excel以及VBA干货更新中!

,