| 
    
     |  | ▼Kein さん: >>次の処理
 >とは何なのか、説明しないと分かりません。3つのシートで連続してフィルター
 >をかける、とだけ書かれていたら誰でも「次のシートに移ること」と解釈しますよ。
 
 説明不足で申し訳ありません。
 次の処理とは、確かに次のシートに移ることなのですが、各シートでオートフィルタをかけて、コピーペーストをし、データがなければ、次のシートに移りオートフィルタをかけてコピーペーストをする。を繰り返しています。
 但し、フィルタ条件が各シート異なり、コピーペースト範囲も違うので、LOOPは使わずに1シートずつさせています。
 
 少々長くなりますが、以下に処理コードを記述しますね。
 
 Sub テスト()
 Dim WS1 As Worksheet
 Dim WS2 As Worksheet
 Dim WS3 As Worksheet
 Dim wb1 As Worksheet
 Dim wb2 As Worksheet
 Dim WB As Workbook
 
 Set WS1 = Sheet(1)
 Set WS2 = Sheet(2)
 Set WS3 = Sheet(3)
 
 Set WB = Workbooks.Open(Filename:="C:\****\****\sanmple.xls")
 Set wb1 = WB.Sheets("サンプル")
 
 'シート1の最終行を取得
 ar = WS1.Range("A65536").End(xlUp).Row
 
 'シート1を5列目に抽出条件を1月1日〜12月31日目までと設定してオートフィルタを設定する。
 
 With WS1
 .AutoFilterMode = 0
 .Range("A2:A" & ar).CurrentRegion.AutoFilter 5, Criteria1:=">=2006/1/1", Operator:=xlAnd, Criteria2:="<=2007/12/31"
 End With
 'もし、2列目以降が空白なら、処理に進む
 If WorksheetFunction.CountA(Range("A2:A65536") _
 .SpecialCells(xlCellTypeVisible)) = 0 Then
 
 GoTo 処理
 End If
 '可視セルの最終行までを選択
 With WS1.Range("A2", WS1.Range("A65536").End(xlUp)) _
 .SpecialCells(xlCellTypeVisible)
 
 WS1.AutoFilter.Range.SpecialCells (xlCellTypeVisible)
 .Offset(,1).Copy
 wb1.Range("A2").Offset(, -3).PasteSpecial Paste:=xlValues
 ・
 ・
 ・
 End With
 
 処理:'シート2の最終行を取得
 BR = WS3.Range("A65536").End(xlUp).Row
 
 'シート1を6列目に抽出条件を1月1日〜12月31日目までと設定してオートフィルタを設定する。
 
 With WS2
 .AutoFilterMode = 0
 .Range("A2:A" & BR).CurrentRegion.AutoFilter 6, Criteria1:=">=2006/1/1", Operator:=xlAnd, Criteria2:="<=2006/12/31"
 End With
 
 'もし、2列目以降が空白なら、処理2に進む
 If WorksheetFunction.CountA(Range("A2:A65536") _
 .SpecialCells(xlCellTypeVisible)) = 0 Then
 GoTo 処理2
 End If
 'サンプルシートのB列の空白を含む最終行を取得
 Set rngTemp = wb1.Cells(Rows.Count, 2).End(xlUp).Offset(1)
 'シート3の可視セルの最終行までを
 With WS3.Range("A2", WS3.Range("A65536").End(xlUp)) _
 .SpecialCells(xlCellTypeVisible)
 'シート3の可視セルを列ごとサンプルシートへ転記
 WS3.AutoFilter.Range.SpecialCells (xlCellTypeVisible)
 .Offset(, 3).Copy
 rngTemp.Offset(, -3).PasteSpecial Paste:=xlValues
 ・
 ・
 ・
 End With
 
 処理2:'サンプルシートのA8を基準にソートする。
 Const myOrder As Integer = xlAscending
 wb1.Range("A8:U1252").Sort _
 Key1:=Range("A8"), _
 Order1:=myOrder, _
 Header:=xlNo, _
 OrderCustom:=1, _
 MatchCase:=False, _
 Orientation:=xlSortRows
 End Sub
 という感じです。
 処理の内容(フィルタの条件や抽出元)がシート毎に違うので、Forは使えないかなと思ったのですが・・・。
 使えますか?
 
 
 |  |