- ベストアンサー
フィルタ結果の行数を取得する方法とは?
- フィルタ結果が有れば別シートに転記したいが、該当行が存在しない場合は転記しないように修正しようとしているがうまくいかない。
- フィルタ結果の行数を取得するために、可視セルのVBA指定を使用しているが、xlVisible表記とxlCellTypeVisible表記の違いは何か?
- フィルタ結果の行数を取得する方法がわからないため、作業が進まない。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
データ例が質問に載せてないので、簡略化した。 (この点が、回答者のテストをするために、時間がかかることを認識してくれてない質問がほとんどで、困る。) E,H列のみデータを入れて手抜き。 a b c d e f g h a2 0 本委託 a3 0 本委託 a4 1 仮委託 a5 0 本委託 a6 2 部門 a7 1 本委託 a8 0 本委託 18列ーー>8列、15列ーー>5列にしてやってみた。 Sub test01() Set ws1 = Worksheets("Sheet1") Set ws2 = Worksheets("Sheet2") ws1.Activate ws1.Cells.AutoFilter ws1.Rows("1:1").AutoFilter Field:=8, Criteria1:="=*委託*", Operator:=xlAnd ws1.Rows("1:1").AutoFilter Field:=5, Criteria1:="=0", Operator:=xlAnd If Cells(Rows.Count, 1).End(xlUp).Row = 1 Then MsgBox "0件です" '<--コピーしない Else MsgBox Range(Range("A2"), Cells(Rows.Count, 1).End(xlUp)) _ .SpecialCells(xlCellTypeVisible).Count & "件です" 'コピー j = 1 For Each c In ActiveSheet.AutoFilter.Range.Columns(1).SpecialCells(xlCellTypeVisible) MsgBox "表示されているデータの行番号は" & c.Row & "です。" ws1.Rows(c.Row).Copy ws2.Cells(j, "A") j = j + 1 Next c End If End Sub 該当件数はhttps://www.moug.net/tech/exvba/0150043.htmlなどに載っているよ。 条件を変えて2度目以降のフィルタを行い、Sheet2に累積する場合は、WS1の見出し行を、ダブってWS2に持って行かないようにコードに注意(今回略)。
お礼
imogasi様 回答ありがとうございます。 お礼が遅れてすみません。先ほどやっと検証が終わりました。 サンプルデータの用意が無かったのはごめんなさい。 ここに3日ほどハマって疲労困憊だったのと、ただの文法ミスだろうから 玄人な視点から見れば、私が理解していない点をピンポイントで指摘して 終わるだろうと(データ検証が不要なほどの凡ミスだろうと)思ってました。 お陰様で新しい知見もいただけましたし、正しく動く環境から翻って自分の ハマってた処も検証できました。 Cells(Rows.Count, 1).End(xlUp).Row = 1 はかなり衝撃を受けました。 正しくない結果がでるから通常は禁じ手だけど、逆手にとって、 見出し行のみor結果有の判別には使えるのですね… ありがとうございました。