フィルター適用時の 表示されている行の取得には、.SpecialCells(xlCellTypeVisible) を使います。
【OfficeTANAKA】
絞り込んだ結果の行を操作する
http://officetanaka.net/excel/vba/tips/tips155d.htm
更に、選択された範囲 は Selection で取得できますが、
先のフィルターの適用範囲と、Selection の重複範囲について取得したい事になりますから
Application.Intersect( オートフィルター適用範囲、Selection)
で、目的の範囲を取得できます。
が・・・
Selection が、連続の 範囲であれば良いのですが、
2〜3行目 と、飛んで 5行目 を選んだ場合、
Application.Intersect( オートフィルター適用範囲、Selection).Rows.Count
と しても、最初の選択範囲 の 2〜3行目の Rows.Count の 2しか出てきません。
(Application.Intersect( オートフィルター適用範囲、Selection) に、5行目も含まれていますが
Rows は、最初の連続範囲 のコレクションになります。 )
2番目の連続範囲のRows に対しても Countを行う必要があります。
この時、各連続範囲は、Areas(n) で取得できます。
なので・・・
For Each rng In Application.Intersect(Selection, .SpecialCells(xlCellTypeVisible)).Areas
i = i + rng.Rows.Count
Next
Msgbox i
の様な感じになります。