現在、ExcelVBAの勉強を独学でやっております。
主にネットでググったりなどして自分で動かしながらやっています。
そこでオートフィルタについて知識のある方からのご教示をいただきたく、相談させていただきました。
現在、オートフィルタした後の結果が何件あるかということを判断するコードを
考えています。
今までは、オートフィルタした後の結果から最終行を取得し、その値が「1」(見出し行)以外だったら
オートフィルタした結果は0だということにしようと考えていました。
ソースはこんな感じです。
ExcelVBA
1'(略) 2 3with outputFile 4 5'オートフィルタ 6.Range("A2").AutoFilter Field:=strfilter_Row, Criteria1:="=AAAA", Operator:=xlAnd, Criteria2:="=VVV" 7 8'オートフィルタ結果の最終行の値を変数に格納 9endcol = .UsedRange.Rows(.UsedRange.Rows.Count).Row 10 11'オートフィルタの結果が0だった場合 12If endcol = 1 Then 13 '~処理~ 14 15end if 16 17End with
でも、これだとよく考えたら、例えばデータが63件(見出し行も含む)だとすると、
オートフィルタした結果が0件だったとしても結果は64行目、という値が返ってきてしまいます。
なので、オートフィルタの件数を取得するコードを探しました。
そしたらこのコードがあったので、これで試してみました。
ExcelVBA
1If Cells(Rows.Count, 1).End(xlUp).Row = 1 Then 2 MsgBox "0件です" 3Else 4 MsgBox Range(Range("A2"), Cells(Rows.Count, 1).End(xlUp)) _ 5 .SpecialCells(xlCellTypeVisible).Count & "件です" 6End If
しかし、これも試してみたのですが、なぜかうまくいかず・・・。
それで、それならば、せっかくなので1つめのコードでうまくいってるのだからそれをうまく使えないか考えました。
そして、例えば1つ目のコードを動かした結果最終行が64行目だという結果が出るなら、
そこからさらに1つ上の行を読んで、その行が1行目だったら0件とみなす、というふうに
しようかなと考えました。
しかし、そういう結果を出すためのコードが思いつきません。
どなたかご教示いただけないでしょうか。
よろしくお願いいたします。

回答2件
あなたの回答
tips
プレビュー