2016-10-24 2 views
0

私のExcelシートでは、フィルタを適用しています。その後、表示行を数えています。 次のコードを使用しましたが、カウントが間違っています。私がxlCellTypeVisibleを持っているとき、それは "14"レコードの代わりに "12"レコードを表示し、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

試してみるときに呼び出されています範囲の1行目、すなわち: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

私は分かりませんが、代わりにカウント機能を使用しませんか?言いにくいですが、その行動は私には正しいようです。私たちがデータを持っていないときは、言うことは難しいです。表示されているセルのワークシートにsum関数を適用し、マクロと同じであれば返すものを確認してください。

+0

フィルタリングされた行または列がある場合、 'COUNT'関数は正しくカウントされません。 – RCaetano

+0

私は上記のマクロを参照していました。可視セルだけを選択しているので、その場合は動作します – holmicz

1

多分SUBTOTAL機能を利用することができます。この関数は、値をフィルタリングしたときに非常に頻繁に使用されます。あなたは、リンクを確認することができます。この機能の詳細については

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

' 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 

小計引数リスト:あなたはにあなたのコードを適応させることができます。

HTH;)

+0

#RCaetano –

関連する問題