🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Q&A

解決済

1回答

11478閲覧

listobjectのオートフィルタの結果行数を取得したい。

ryoucyan2000

総合スコア18

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

0グッド

2クリップ

投稿2019/10/03 11:10

シート上にあるテーブル[basicT]をオートフィルタで絞り込んだ件数を取得したいです。
具体的にはフィルタ結果が0件か そうでないかを判断したい。
下記のようにするとフィルタの結果が10件であろうと0件であろうと結果がどうやっても1になります。

vba

1basicT.Range.AutoFilter 1, Range("ユーザコード") 2Debug.Print (basicT.Range.SpecialCells(xlCellTypeVisible).Rows.Count)

また

vba

1 2Debug.Print (DataBodyRange.SpecialCells(xlCellTypeVisible).Rows.Count)

とすると1件以上あると見た目どおりのレコード数を返すのですが0件だと
[実行時エラー'1004' 該当するセルが見つかりません]
となってしまいます。

解決方法をご教授いただけないでしょうか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

ExcelVBA

1Sub test() 2 Dim ws As Worksheet 3 Dim i As Long 4 5 Set ws = ActiveSheet 6 7 With ws.ListObjects(1) 8 .Range.AutoFilter 1, 1 9 i = .Range.Columns(1).SpecialCells(xlCellTypeVisible).Count - 1 10 11' On Error resume next 12' i = .DataBodyRange.Columns(1).SpecialCells(xlCellTypeVisible).Count 13' On Error goto 0 14 End With 15 MsgBox i & "件です。" 16End Sub

.SpecialCells(xlCellTypeVisible).Rows.Count
とやると、
飛び飛びに表示されている1番目のエリアの行数を数えてしまうようです。

1列に限定して、セルの数を数えてみてください。

投稿2019/10/04 01:22

編集2019/10/04 01:27
mattuwan

総合スコア2163

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ryoucyan2000

2019/10/04 02:56

解決しました。range.countにするとすべてのセル数を返してきて使えないと思っていましが、カラムを絞ってやればよかったんですね。 ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問