如何在Excel VBA中筛选后可见的行数
在我的Excel工作表中,我正在应用一个filter,之后,我正在计数可见的行。 我用下面的代码,但我得到一个错误的计数。 当我有xlCellTypeVisible
它显示“12”logging而不是“14”logging和visibleTotal
variables显示“0”计数。
Dim ws As Worksheet Dim rng As Range Dim visibleTotal As Long 'xlwkbOutput.Sheets("Sheet1") Set rng = xlwkbOutput.Sheets("Sheet1").Range("A1:T" & lastRow&) xlwkbOutput.Sheets("Sheet1").AutoFilterMode = False rng.AutoFilter field:=1, Criteria1:="#N/A" visibleTotal = Application.WorksheetFunction.Sum(rng.SpecialCells(xlCellTypeVisible)) ' print to the immediate window Debug.Print visibleTotal
你的叙述是关于“计数可见的行”,而你的代码显示一个SUM()
函数
无论如何,这里是如何得到两个数字,请记住, Autofilter()
将始终过滤标题行,即它被调用的范围的第一行
Option Explicit Sub main() Dim visibleTotal As Long, visibleRows As Long With xlwkbOutput.Sheets("Sheet1") '<-- reference your worksheet .AutoFilterMode = False With .Range("A1:T5") '<-- reference its relevant range .AutoFilter field:=1, Criteria1:="#N/A" '<-- apply filter: first row (headers) will always be selected visibleRows = Application.WorksheetFunction.Subtotal(103, .Resize(, 1)) - 1 '<-- count visible rows, excluding headers (always filtered) If visibleRows > 0 Then visibleTotal = Application.WorksheetFunction.Sum(.Offset(1).Resize(.Rows.Count - 1).SpecialCells(xlCellTypeVisible)) '<-- sum all visible cells, excluding headers (always filtered) ' print to the immediate window Debug.Print visibleTotal End With .AutoFilterMode = False End With End Sub
也许你可以使用SUBTOTAL
function。 这个函数在过滤值时经常使用。 您可以调整您的代码:
' To SUM filtered rows use 9 as argument of SUBTOTAL or to COUNTA use 3 ' "- 1" is to exclude the first row, probably the header of your range; otherwise remove it visibleTotal = Application.WorksheetFunction.Subtotal(9, rng) - 1
SUBTOTAL参数列表:
1 AVERAGE 2 COUNT 3 COUNTA 4 MAX 5 MIN 6 PRODUCT 7 STDEV 8 STDEVP 9 SUM 10 VAR 11 VARP
有关此function的更多信息,您可以检查链接。
HTH;)
我不知道,你不想用Count函数吗? 这很难说,但行为似乎对我来说是正确的。 当我们没有数据时,很难说。 尝试将sum函数应用于可见单元格的工作表中,并检查它是否与macros中的相同。