テーブルにオートフィルタをかけて抽出結果をコピーするマクロを書いてて
Excelのテーブルをオートフィルタして抽出結果が0件のとき(タイトル)
抽出結果を無視してテーブルを全件コピーしてしまう挙動に悩まされたのでメモ
やってたこと
このデータ抽出のところで抽出結果が0件のときだけ全件引っ張ってきてしまう、抽出結果が1件でもあれば問題なし
' オートフィルタ(年月で抽出) With shtData.Range("A3").ListObject.Range .AutoFilter lngColYear, "2019" .AutoFilter lngColMonth, "3" End With ’ データ抽出(種別列+その右の3列) With shtData.Range("A3").ListObject Set rngData = Union(.ListColumns(lngColSyubetu).DataBodyRange, _ .ListColumns(lngColSyubetu + 1).DataBodyRange, _ .ListColumns(lngColSyubetu + 2).DataBodyRange, _ .ListColumns(lngColSyubetu + 3).DataBodyRange) End With ' データを貼り付け rngData.Copy shtReport.Range("A2")
対処したこと
いまひとつ理由が分からなかったので、オートフィルタをかけた時点で件数チェックのIF文を追加して、抽出結果が0件の時は貼り付けないようにした
If shtData.Range("A3").ListObject.Range.Columns(1).SpecialCells(xlCellTypeVisible).Count = 1 Then
最初は、ListObject.DataBodyRange(テーブルのタイトル行を除いたデータ部)のSpecialCells(xlCellTypeVisible)がnothingでいけると思ったけどエラーで×
ListObject.Range(テーブルのタイトル行を含めた全件)のSpecialCells(xlCellTypeVisible)の行数が1=タイトル行しかないで通った