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で絞り込む
方法がベストではないでしょうか。
|