「エクセル vba オートフィルタ コピー タイトル以外」
「excel マクロ オートフィルタ コピー タイトル行以外」
「vba オートフィルター コピー 見出しを除く」
「マクロ オートフィルター コピー 見出し 除外」
といった検索で、このサイト・インストラクターのネタ帳へのアクセスが、時折あります。
フィルター機能で抽出されたデータは「.CurrentRegion.SpecialCells(xlVisible).Copy」といったオブジェクト式でコピーすることができます。しかし、これだけではフィールドタイトル・見出し行までコピーされます。
VBA(Visual Basic for Applications)で、フィルター機能で抽出されたデータをコピーする際に、見出し行を除いてコピーするにはどうすればいいのかを探していたのが、先の検索キーワードです。
見出し行を除いて抽出データをコピーするサンプルマクロ
一番簡単なのは、一旦、見出し行も含んだ状態でコピーを行って、コピー後に不要な見出し行を削除する方法でしょう。
Dim rng As Range
Set rng = Sheets("コピー先") _
.Cells(Rows.Count, "A").End(xlUp).Offset(1, 0)
Range("A1").CurrentRegion.SpecialCells(xlVisible).Copy _
Destination:=rng
rng.EntireRow.Delete Shift:=xlUp
フィルター実行後に、上記のマクロを実行すると、抽出されたデータが「コピー先」シートにコピーされ、見出し行の削除が行われます。
サンプルマクロの解説
抽出したデータを貼り付けるコピー先のセルを、オブジェクト変数・rngにセットしておきます。
Set rng = Sheets("コピー先") _
.Cells(Rows.Count, "A").End(xlUp).Offset(1, 0)
「Cells(Rows.Count, "A").End(xlUp)」というのはデータの入っている最終セルを探す定番のオブジェクト式です。
「Cells(Rows.Count, "A").End(xlUp)」で見つかるのは、データの入っているセルです。データの貼り付けるセルはその一つ下である必要があるため、RangeオブジェクトのOffsetプロパティを使って一つ下のセルを取得しています。
オブジェクト変数・rngにセットされたセルをコピー先にして、アクティブシートの抽出データ・可視セルデータをコピーして、
Range("A1").CurrentRegion.SpecialCells(xlVisible).Copy _
Destination:=rng
オブジェクト変数・rngを含む行全体をEntireRowプロパティで取得して、Deleteメソッドの引数・Shiftに定数・xlUpを指定することで、削除後に上へシフトを行っています。
rng.EntireRow.Delete Shift:=xlUp
Home » Excel VBA Rangeオブジェクト » CurrentRegionプロパティ » オートフィルターしたデータの見出し行以外をコピーするExcelマクロ