表をオートフィルターを使って絞りこみ、絞り込まれた見えている行だけをコピーすることがよくあります。
色んな入門書の説明によれば、絞りこみ表示されている結果(可視セルとも言います)のみコピーしてくれるから安心してください!って書いてあることが多いのですが、
テーブルの場合で試してみると・・・
いやいや、表示されていないデータもコピーされるじゃないですか・・・。
でも、何度か試していると、あれ?
言われている通り、表示されている行のみの場合もある・・・。
ということがあります。
今回は、そんな問題のお話です。
まずはテーブルを絞り込んでコピーしてみる
例えばこんなテーブルがあるとします。

この表を、値が「a」の行のみに絞りこんで、絞りこんだ結果をコピペしたいとき、こんなコードになりますね。
With range("A1").ListObject
.range.AutoFilter 1, "a"
.range.Copy Sheets("to").range("A1")
End With
これを実行すると・・・

こんな風に、絞り込んだ「a」の2行だけコピーして欲しいんです。
でも、実は、全行がコピーされてしまうことがあります。これ、実は、、実行前にテーブルを選択しているかどうかなんです。
調べた結果
・テーブルのどこかを選択して実行→絞りこんだ結果だけコピー
・テーブル以外を選択して実行→テーブル全行をコピー
ということなんです。
これは、VBAの公式テキストによるとエクセルのバグらしく、どうしようもないようです。
テーブル以外を選択していても動くようにしよう!
エクセルのバグなら仕方ないですね。。。。
どこを選択していても、正しく絞り込んだ行だけコピーするように対処しておきましょう。
さっきのコードに、テーブル選択する処理を追加してみます。赤線の部分です。
With range("A1").ListObject
.range.Select
.range.AutoFilter 1, "a"
.range.Copy Sheets("to").range("A1")
End With
こうしておけば、どこを選択していようが、最初にテーブルを選択するようになるので、問題ありません。
ちなみに、これはテーブルのときにだけ起こります。
テーブルではない、ただの表は問題ないので、テーブルのときはこれを思い出すと良いと思います。