END屬性常用來構(gòu)建動態(tài)的單元格范圍,獲取有效的數(shù)據(jù)區(qū)域株搔。
- 其寫法是
單元格.end(方向)
- 要構(gòu)建一個行數(shù)不斷增加的動態(tài)單元格范圍剖淀,如下面代碼
Sub 動態(tài)單元格()
Dim 最后一行 As Long, 最后一行1 As Long
Dim rng As Range, rng1 As Range
最后一行 = Range("a1").End(xlDown).Row
最后一行1 = Range("a13").End(xlUp).Row
Set rng = Range("a1:c" & 最后一行)
Debug.Print "rng的單元格范圍是" & rng.Address
Set rng1 = Range("a1:c" & 最后一行1)
Debug.Print "rng1的單元格范圍是" & rng1.Address
End Sub
最后一行 = Range("a1").End(xlDown).Row
從A2(A1不算)開始在A列向下xlDown查找 ‘連續(xù)’ 不為空的單元格,
一旦遇到空單元格則停止纤房,返回最后一個非空單元格(地址)纵隔。
最后一行1 = Range("a13").End(xlUp).Row
從A12(A13不算)開始在A列向上xlUp查找不為空的單元格,
過程中遇到不為空單元格則停止炮姨,返回不為空單元格的(地址)捌刮。
- end(xldown)查找演示(遇空則停)
- end(xlup)同理,換個方向而已(找到非空為止)。
-
假如A5單元格變?yōu)榭諉卧袷姘叮瑒t上面兩個end返回不同的行號绅作。
- 當(dāng)行數(shù)增加后,再運(yùn)行代碼
- 注意紅色方框中的Range("a65535")蛾派,通常使用end(xlup)時俄认,會設(shè)置一個比大的單元格作為起始點(diǎn)。
-03版的的excel有65536行洪乍。
-07版以上的excel有1048576行眯杏。
-因此,如果Range("a1048576").end(xlup)這種寫法在03版是報(bào)錯的壳澳,因?yàn)?3excel不支持那么大的行數(shù)岂贩。 - 解決方法是下面的這種寫法
Cells(Rows.Count, 1).End(xlUp).Row
- 如果是03版excel,則rows.count是65536,07版以上1048576.
- 如指定單元格區(qū)域钾埂,則rows.count返回該單元格區(qū)域的行數(shù)河闰。
- END除了xlup,xldown褥紫,還有xltoleft(向左)姜性,xltoright(向右)兩個方向的查找,原理都一樣髓考,通常用來確定動態(tài)單元格范圍的列數(shù)部念。
- 練習(xí):動態(tài)的高級篩選:根據(jù)部門篩選
- 先錄制高級篩選的宏,得出這樣的代碼。
Sub 宏2()
Application.CutCopyMode = False
Application.CutCopyMode = False
Sheets("Sheet4").Range("A1:C13").AdvancedFilter Action:=xlFilterCopy, _
CriteriaRange:=Range("A1:A2"), CopyToRange:=Range("A4"), Unique:=False
End Sub
- 將代碼改為動態(tài)的單元格區(qū)域儡炼,將篩選結(jié)果放到另外的工作表妓湘。
-
1、用End屬性構(gòu)建動態(tài)的單元格區(qū)域乌询。很少的改動就可以實(shí)現(xiàn)動態(tài)高級篩選榜贴。
Paste_Image.png
Sub 宏2()
Dim LastRow As Long
LastRow = Sheets("sheet4").Cells(Rows.Count, 1).End(xlUp).Row '動態(tài)獲取數(shù)據(jù)行數(shù)
Sheets("Sheet4").Range("A1:C" & LastRow).AdvancedFilter Action:=xlFilterCopy, _
CriteriaRange:=Sheets("sheet1").Range("A1:A2"), CopyToRange:=Sheets("sheet1").Range("A4"), Unique:=False
End Sub
- 代碼效果演示如下。稍稍修改妹田,高級篩選就方便如意唬党。