HOME > 即効テクニック > Excel VBA > セル操作関連のテクニック > AutoFilterで抽出した行のうち任意の行数をコピーする

即効テクニック

セル操作関連のテクニック

AutoFilterで抽出した行のうち任意の行数をコピーする

(Excel 97)
100行程あるデータをオートフィルターで抽出します。
この、抽出後のデータを、たとえば30行ごとにコピーして別のシートに貼り付けたいので。
Selection.Resize(30,6).Select
としても、抽出行だけでなくすべてが対象になってしまいます。
抽出行全体を一度ダミーのシートにコピーして、その後に30行ごとにコピーするなど、いくつか方法を挙げてみます。
「抽出行全体を一度ダミーのシートにコピー」というと、
Range("A1").CurrentRegion.SpecialCells(xlCellTypeVisible).Copy
Worksheets("Sheet1").Range("A1").PasteSpecial
というような処理になります。そして、それを30行ごとに再度コピーし直すわけです。オートフィルターをかけたRangeオブジェクトに対してResizeは使えません。セルの領域が複数に分割されてしまっているからです。
ちなみに、この領域はAreaオブジェクトという特殊なRangeオブジェクトに属します。
また、次のようにUnionメソッドを使えば不可能な話しではありませんが
    Dim i As Integer, myCell As Range
    Range("A1").CurrentRegion.SpecialCells(xlCellTypeVisible).Select

    Set myCell = Selection.Range(Cells(1, 6), Cells(1, 6))
    For i = 2 To 30
        Set myCell = Application.Union(myCell, Selection.Range(Cells(i,
        6), Cells(i, 6)))
    Next i
これでも不十分です。
結局、オートフィルターによって、いくつのセル領域(Areaオブジェクト)に分割されたかをカウントし、各Areaオブジェクトは何行のRangeオブジェクトから構成されているかをさらにカウントして、上のようにループしながらUnionメソッドで結合していくしか方法はないと思われます。
そして、これはかなり複雑なコードになるでしょう。
ということで、ダミーのシートを利用してResizeで絞り込む方法がベストではないでしょうか。