アプリ版:「スタンプのみでお礼する」機能のリリースについて

Excel VBAにて、SpecialCells(xlCellTypeVisible) に関する質問です。

セル ("A1:B7")に表があります。

ab
11
11
22
22
33
33

下記のVBAにて、temp2の値が、1となります。これが分かりません。
当方、欲しいのは、オートフィルタ後の見えている行の数です。

temp1=6は、オートフィルタで、選択されたセルs+ヘッダの計6こということで理解しています。
temp3=2は、列の数として、合っています。

Sub Macro1()
Dim aa As Range
Set aa = Range("A1:B7")
aa.AutoFilter Field:=2, Criteria1:="2"
temp1 = aa.SpecialCells(xlCellTypeVisible).Cells.Count 'temp1=6
temp2 = aa.SpecialCells(xlCellTypeVisible).Rows.Count 'temp2=1
temp3 = aa.SpecialCells(xlCellTypeVisible).Columns.Count 'temp3=2
End Sub

考え方として、間違ってはいないと思うのですが、行の数を求めるには、どのようにすれば良いでしょうか?

A 回答 (1件)

こんにちは。



>temp2 = aa.SpecialCells(xlCellTypeVisible).Rows.Count 'temp2=1

Rows というものは、あくまでも、ひとつまとまりになったものの行の範囲のことですから、飛び飛びになったAreas(Rangeの集合体)の状態では、その先頭のAreaのひとつしか数えません。

a  b
2  2
1  1
2  2
2  2
3  3
3  3

だから、この場合は、2になるはずです。

以下の考え方で、見比べてみてください。ひとつは、列に対して、もうひとつは、Area に対してカウントしています。

  temp4 = aa.Resize(, 1).SpecialCells(xlCellTypeVisible).Cells.Count

For Each a In aa.SpecialCells(xlCellTypeVisible).Rows.Areas
  temp5 = temp5 + a.Rows.Count
Next
    • good
    • 1
この回答へのお礼

Wendy02さん、非常に分かりやすい説明、ありがとうございます。
Rowsの概念をきちんと理解することが大切なのですね。
ありがとうございます。

お礼日時:2007/12/15 13:05

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!