Excel VBA(エクセル マクロ) 関数集 オートフィルター、コピー

AutoFilter、AdvancedFilter

Excel VBAでのオートフィルター、コピー方法

・AutoFilter
Excel標準機能のツールバーから【データ】→【フィルタ】→【オートフィルタ】を実行し、コピーまでできる。

シート:データのA1〜Z1000の範囲について、9列目に「りんご」がある行を抽出し、その状態をシート:データ1のA1を先頭として転記。最後にオートフィルタを戻す。

Worksheets("データ").Range(A1:Z1000).AutoFilter 9, "りんご"
Worksheets("データ").Range(A1:Z1000).Copy Worksheets("データ1").Range(A1)
Worksheets("データ").Range(A1:Z1000).AutoFilter

Worksheets("データ").Range(A1:Z1000)が何度も出てきてみにくいので、With構文ですっきりさせる。
また、全ての書式と列幅も一緒にコピーする。

With Worksheets("データ").Range(A1:Z1000) 
 .AutoFilter 9, "りんご"
 .Copy
 Worksheets("データ1").Range(A1).PasteSpecial Paste:=8 '列幅コピー
 Worksheets("データ1").Range(A1).PasteSpecial xlPasteAll '全ての書式をコピー
 .AutoFilter
End With

何度もフィルタをかけたり、AND、OR、ワイルドカード*を使用してフィルタをかけてコピーする。

With Worksheets("データ").Range(A1:Z1000) 
 .AutoFilter 9, "*L*", xlOr, "B???" 'Lを含む文字か、Bで始まる4文字
 .AutoFilter 4, ">=2005/5/1", xlAnd, "<=2005/6/1", xlAnd "<>2005/5/15" '2005/5/1〜2005/6/1で2005/5/15を含まない。
 .Copy
 Worksheets("データ1").Range(A1).PasteSpecial Paste:=8 '列幅コピー
 Worksheets("データ1").Range(A1).PasteSpecial xlPasteAll '全ての書式をコピー
 .AutoFilter
End With

・AdvancedFilter
 Excel標準機能のツールバーから【データ】→【フィルタ】→【フィルタオプションの設定】を実行し、コピーまでできる。
 シートに対してオートフィルタをかけ、さらに必要な列のみを抽出してコピーしてくれる強力な関数。

With Worksheets("データ").Range(A1:Z1000)
 .AdvancedFilter xlFilterCopy, Worksheets("抽出条件").Range(A1:A2), CopyToRange:=Worksheets("データ1").Range(A1:B1:C1)
 .AdvancedFilter xlFilterCopy, Worksheets("抽出条件").Range(A1:A2), CopyToRange:=Worksheets("データ1").Range(F1:G1)
 Worksheets("データ1").Range(A1:B1:C1).CurrentRegion.EntireColumn.AutoFit
 Worksheets("データ1").Range(F1:G1).CurrentRegion.EntireColumn.AutoFit
 .AutoFilter
End With

コピー元であるシート:データの行の先頭A1〜Z1には、列の題名を入れておきA2以降にデータを入れる。

抽出条件はA1に題名、A2に抽出条件を入れる。
複雑な抽出条件を決めたい場合はこちらを参照。

コピー先であるシート1:データ1の行の先頭A1,B1,C1,F1,G1にはコピーしたい列の題名を入れておく。

D列、E列はコピーしたくないため、CopyToRangeにはA1:B1:C1、F1,G1の二つを指定する。

列幅をあわせるためには、CurrentRegion.EntireColumn.AutoFitを使用する。
CurrentRegionはアクティブセル(行、列に対し空白がなくなるまでの領域)として指定する。

以上で、コピーが完了するはず。

これは、実際にやってみて試行錯誤しながらやってみよう。
(私はかなり苦労した。。)


忍者Admaxのテキスト広告で収入UP!

実践!ExcelデータベースTOP