|    | 
     ▼ののか さん: 
>移動に変更したいです。 
>元のシートに残らないようにVBAを変更してほしいのですが・・・ 
 
フィルタで抽出した範囲を(Copyではなく)、Cut すればいいと思うが、 
不連続行に対して Cut&Pasteはできないので、 
作業列に「1」を全行書き込んでおいてから、 
フィルタかけて抽出された行の作業列だけ「空白」に置き換えてから、 
作業列でSortかけると、抽出行が元表の下方に集合するので、 
作業列が空白の範囲(単一エリア)を Cutして「AA」シートに貼り付ける 
ようにしました。 
 
Sub AAデータの移動_AutoFilter() 
 Dim AAsheet As Worksheet 
 Dim ws As Worksheet 
 Dim fCount As Long 
 Dim cFrom As Range 
 Dim CopyTo As Range 
 Dim n As Long, m As Long 
  
 With ActiveWorkbook.Worksheets 
   On Error Resume Next 
   Set AAsheet = .Item("AA") '転記先シート 
   On Error GoTo 0 
   If AAsheet Is Nothing Then 
     If MsgBox("「AA」シートがありません。作成しますか?", _ 
       vbOKCancel) = vbOK Then 
       Set AAsheet = .Add(After:=.Item(.Count)) 
       AAsheet.Name = "AA" 
     Else 
       Exit Sub 
     End If 
   Else 
     AAsheet.UsedRange.ClearContents 
   End If 
 End With 
       
 For Each ws In ActiveWorkbook.Worksheets 
   If IsNumeric(ws.Name) Then 
     ws.AutoFilterMode = False 
     With ws.Cells(1).CurrentRegion 
      m = .Columns.Count 
      .Columns(m + 1).Value = 1  '作業列に1を書き込む 
      .AutoFilter 3, "AA" 
      n = .Columns(1).SpecialCells(xlVisible).Count 
      If n > 1 Then 
        fCount = fCount + 1 
        Set CopyTo = AAsheet.Cells(Rows.Count, 1).End(xlUp) 
        If fCount = 1 Then 
          .Rows(1).Copy CopyTo   '項目行のコピー 
        End If 
        Set cFrom = Intersect(.Cells, .Offset(1)) 
        cFrom.Columns(m + 1).ClearContents '可視行だけClear 
        .AutoFilter  'フィルタ解除して ↓作業列で並び替え 
        cFrom.Resize(, m + 1).Sort Key1:=cFrom.Columns(m + 1), _ 
           Header:=xlNo 
        '作業列が空白の行だけ移動 
        cFrom.Resize(n - 1).Offset(.Rows.Count - n).Cut CopyTo(2) 
      Else 
        .AutoFilter 
      End If 
      .Columns(m + 1).Clear 
     End With 
   End If 
 Next 
  
 MsgBox "抽出転記しました", vbInformation 
 
End Sub 
 
最初のCopyの方法で、処理速度はどんな程度だったのですか? 
次々要求を挙げるのでなく、コードを理解することが大切です。 
分からないところがあったら、質問してください。 
 
 | 
     
    
   |