Excel的篩選是一個常用功能,即使是入門不久的小白也會使用。但是在VBA處理數據時,如果工作表中的數據表使用了篩選,那麼使用VBA如何知道到底有多少行處於顯示狀態呢?
如下圖數據表中有12行數據(不包括標題行),經過篩選後,在狀態條左側可以輕鬆地知道:有4條記錄符合篩選規則。
下面看看如何使用代碼獲取篩選後的記錄數量。
Sub RowCntAfterFilter1()
Dim rng As Range
Dim c As Range
Dim n As Integer
Set rng = [a1].CurrentRegion
For Each c In rng.SpecialCells(xlCellTypeVisible).Areas
n = n + c.Rows.Count
Next c
MsgBox "篩選後數據行數爲:" & n - 1
End Sub
【代碼解析】
第5行代碼使用CurrentRegion
獲取當前數據區域,並賦值給對象變量rng。
第6行到第8行代碼使用For...Next
循環遍歷當前數據區域,其中SpecialCells(xlCellTypeVisible)
獲取可見數據區域,也就是符合篩選添加的數據行。
第6行代碼中的Areas
也可以使用Rows
代替,對於連續的可見行屬於同一個Area
,因此使用Areas
可以減少循環次數,提升代碼效率。
第7行代碼進行累加計數統計行數。
第9行代碼輸出結果如下圖所示,注意由於數據標題行也包含在CurrentRegion
中,因此顯示結果時需要使用n - 1
。