| 
    
     |  | ▼うさこ さん: 
 コード案を2つほどアップします。
 ご参考まで。(急いで書いたので結構、処理効率は悪いです。)
 ほんとは、フィルタオプションが適していると思います。
 もし、ご興味があれば、そのバージョンを書いてアップします。
 
 Sub Sample1()  'オートフィルター
 Dim yy As Long
 Dim mm As Long
 
 Application.ScreenUpdating = False
 
 yy = 2012
 mm = 7
 
 With Sheets("Sheet1")
 .AutoFilterMode = False '設定されていればいったん解除
 .Range("A1").AutoFilter
 
 .AutoFilter.Range.AutoFilter Field:=1, _
 Criteria1:=">=" & CDbl(DateSerial(yy, mm, 1)), Criteria2:="<" & CDbl(DateSerial(yy, mm + 1, 1)), Operator:=xlAnd
 
 .UsedRange.Copy Sheets("Sheet2").Range("A1")
 .UsedRange.Copy Sheets("Sheet3").Range("A1")
 
 .AutoFilterMode = False
 
 End With
 
 Sheets("Sheet2").Columns("H:L").Delete
 Sheets("Sheet3").Columns("C:G").Delete
 
 Application.ScreenUpdating = True
 
 End Sub
 
 Sub Sample2()  'フィルターを使わない(上司の命令?)
 Dim v() As Variant
 Dim c As Range
 Dim k As Long
 Dim yy As Long
 Dim mm As Long
 Dim fdate As Date
 Dim tdate As Date
 
 Application.ScreenUpdating = False
 
 yy = 2012
 mm = 7
 
 fdate = DateSerial(yy, mm, 1)
 tdate = DateSerial(yy, mm + 1, 1)
 
 With Sheets("Sheet1")
 ReDim v(1 To .Rows.Count)
 For Each c In .Range("A2", .Range("A" & .Rows.Count).End(xlUp))
 If c.Value >= fdate And c.Value < tdate Then
 k = k + 1
 v(k) = c.EntireRow.Range("A1:L1").Value
 End If
 Next
 End With
 
 ReDim Preserve v(1 To k)
 
 With Sheets("Sheet2")
 .Cells.ClearContents
 .Range("A1:L1").Value = Sheets("Sheet1").Range("A1:L1").Value
 .Range("A2").Resize(k, 12).Value = _
 WorksheetFunction.Transpose(WorksheetFunction.Transpose(v))
 .UsedRange.Copy Sheets("Sheet3").Range("A1")
 End With
 
 Sheets("Sheet2").Columns("H:L").Delete
 Sheets("Sheet3").Columns("C:G").Delete
 
 Application.ScreenUpdating = True
 
 End Sub
 
 
 |  |