2016-10-24 19 views
0

在我的Excel工作表中,我正在應用過濾器,然後計算可見行。 我用下面的代碼,但我得到一個錯誤的計數。當我有xlCellTypeVisible它顯示「12」記錄而不是「14」記錄和visibleTotal變量顯示「0」計數。如何在Excel VBA中過濾後得到可見行的數量

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 
+0

嘗試稱爲範圍的第一行:rng.SpecialCells(xlCellTypeVisible )。 rows.count – Asaf

+0

是否有任何提供的anwers幫助您或是您面臨的另一個問題? – RCaetano

回答

1

你的敘述是關於「計數可見行」,而你的代碼顯示了一個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 
0

我不知道,難道你不想用Count函數嗎?這很難說,但這種行爲似乎對我來說是正確的。當我們沒有數據時,很難說。嘗試在可見單元格上的工作表中應用sum函數,並檢查它是否返回,如果它與宏中相同。

+0

如果存在過濾的行或列,則COUNT功能將無法正確計數。 – RCaetano

+0

我上面提到的是宏,它只是選擇可見的單元格,所以在這種情況下,它會工作 – holmicz

1

也許你可以使用SUBTOTAL函數。當您過濾值時,此功能經常使用。您可以將您的代碼適應:

' 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 

小計參數列表:

1 AVERAGE 
2 COUNT 
3 COUNTA 
4 MAX 
5 MIN 
6 PRODUCT 
7 STDEV 
8 STDEVP 
9 SUM 
10 VAR 
11 VARP 

有關此功能,您可以檢查鏈接的信息。

HTH)

+0

它的工作原理感謝#RCaetano –