| 
    
     |  | >Set WS1 = Sheet(1) >Set WS2 = Sheet(2)
 >Set WS3 = Sheet(3)
 ???コンパイルエラーにならないのでしょうか?
 
 >.Range("A2:A" & ar).CurrentRegion.AutoFilter 5, Criteria1:=">=2006/1/1", Operator:=xlAnd, Criteria2:="<=2007/12/31"
 CurrentRegionを使うなら、これ↓で良いと思います。が、
 データ部がCurrentRegionで確実に取得できるデータ状態である事が前提になります。
 .Range("A2").CurrentRegion.AutoFilter 5, Criteria1:=">=2006/1/1", Operator:=xlAnd, Criteria2:="<=2007/12/31"
 
 >'もし、2列目以降が空白なら、処理に進む
 >  If WorksheetFunction.CountA(Range("A2:A65536") _
 >  .SpecialCells(xlCellTypeVisible)) = 0 Then
 2列目以降でなく、2行目移行です。
 こういう事は正確に書かないと、すれ違いの元になります。
 
 とりあえず1部分だけですけど...。
 
 With WS1
 .AutoFilterMode = 0
 With .Range("A2").CurrentRegion
 .AutoFilter 5, Criteria1:=">=2006/1/1", Operator:=xlAnd, Criteria2:="<=2007/12/31"
 'もし、2列目以降が空白なら、処理に進む
 '他にやり方が無いわけでもないですが、単純にタイトル行は
 '必ずカウントされるから(最低が1)、2より少なければで無しと判断して処理。
 'ただ、エクセル関数等も1と判断される( = "" もカウント)。
 'データを見てないので、その辺の判断はわかりません。
 If WorksheetFunction.CountA(.Columns("A") _
 .SpecialCells(xlCellTypeVisible)) < 2 Then
 GoTo 処理
 End If
 End With
 End With
 
 
 |  |