AutoFilerで抽出した行のうち任意の行数をコピーする
 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で絞り込む
方法がベストではないでしょうか。

Excel97



戻る


Excel Word Access VBA! モーグ