Home » Excel VBA Rangeオブジェクト » CurrentRegionプロパティ » オートフィルターしたデータの見出し行以外をコピーするExcelマクロ

オートフィルターしたデータの見出し行以外をコピーするExcelマクロ

対象:Excel2007, Excel2010, Excel2013, Windows版Excel2016

「エクセル vba オートフィルタ コピー タイトル以外」
「excel マクロ オートフィルタ コピー タイトル行以外」
「vba オートフィルター コピー 見出しを除く」
「マクロ オートフィルター コピー 見出し 除外」
といった検索で、このサイト・インストラクターのネタ帳へのアクセスが、時折あります。

オートフィルターしたデータの見出し行以外をコピーするExcelマクロ

フィルター機能で抽出されたデータは「.CurrentRegion.SpecialCells(xlVisible).Copy」といったオブジェクト式でコピーすることができます。しかし、これだけではフィールドタイトル・見出し行までコピーされます。

VBA(Visual Basic for Applications)で、フィルター機能で抽出されたデータをコピーする際に、見出し行を除いてコピーするにはどうすればいいのかを探していたのが、先の検索キーワードです。

[スポンサードリンク]

見出し行を除いて抽出データをコピーするサンプルマクロ

一番簡単なのは、一旦、見出し行も含んだ状態でコピーを行って、コピー後に不要な見出し行を削除する方法でしょう。

Sub 抽出データをコピーする()

 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

End Sub

フィルター実行後に、上記のマクロを実行すると、抽出されたデータが「コピー先」シートにコピーされ、見出し行の削除が行われます。

「コピー先」シートには見出し行が既に存在していることを前提としています。

サンプルマクロの解説

抽出したデータを貼り付けるコピー先のセルを、オブジェクト変数・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マクロ

「CurrentRegionプロパティ」の記事一覧

検索


Copyright © インストラクターのネタ帳 All Rights Reserved.

.