2017-10-04 22 views
1

VBAにはかなり新しく、下記のアドバイスが欲しいです。現在、特定の日付をフィルターして別々のシートにしてから=下位のect。 VBAは機能しますが、希望よりも少し時間がかかります。誰も私に解決策を提供することはできますか、私はこれをgoogledし、短縮されたときに動作するようにすることはできません。VBAをコピーして貼り付けて、フィルター処理したセルを別のシートに貼り付ける

Sheets("Paster").Select 
ActiveSheet.Range("$A$1:$AK$801").AutoFilter Field:=10, Criteria1:= _ 
    xlFilterLastYear, Operator:=xlFilterDynamic 
Cells.Select 
Selection.Copy 
Sheets("Hidden").Select 
Cells.Select 
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ 
    :=False, Transpose:=False 
Sheets("Overall").Select 

答えて

0

いつでもあなたはそれが大幅にあなたを減速だ.Copy.Pasteまたは.Selectを使用しています。画面更新と計算をオフにすることで、少し速くすることができます。その後、範囲自体を使って作業することは、いつもより速くなるようになるでしょう。.Selectを使用して除外した方法については、hereを参照してください。通常、.copyを使用してスキップする場合は、This Range = That Rangeと言う方がいいですが、クリップボードを完全にスキップすることはできますが、フィルタリングされたデータでは少し悪夢です。

Sub CopyAndPaste() 

    Dim wbk As Workbook 
    Dim Paste As Worksheet, Hidden As Worksheet, Overall As Worksheet 

    Set wbk = ActiveWorkbook 
    Set Paste = wbk.Worksheets("Paster") 
    Set Hidden = wbk.Worksheets("Hidden") 
    Set Overall = wbk.Worksheets("Overall") 

    Application.ScreenUpdating = False 
    Application.Calculation = xlCalculationManual 

     Paste.Range("$A$1:$AK$801").AutoFilter Field:=10, Criteria1:=xlFilterLastYear, Operator:=xlFilterDynamic 
     Paste.Cells.Copy 

     Hidden.Cells.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False 

    Application.ScreenUpdating = True 
    Application.Calculation = xlCalculationAutomatic 
End Sub 
+0

完璧に動作します、私はVBAが今年、今四半期の同じように動作すると仮定します。 – Fordy

+0

@Fordy私が知っている限り、はい。 [ここ](https://msdn.microsoft.com/en-us/library/microsoft.office.interop.excel.xldynamicfiltercriteria.aspx)のすべてのオプションがあります。 – BerticusMaximus

1

selectを使用するのは非常に遅く、一般的には避けてください。指定されたシート上のすべての操作を実行するには、withステートメントを使用することをお勧めします。このような何かが助けになるはずです。 selectを使用する代わりに、activateを試してください。

With Sheets("Paster").Range("$A$1:$AK$801") 
    .AutoFilter Field:=10, Criteria1:= _ 
    xlFilterLastYear, Operator:=xlFilterDynamic 
    .Copy 
End With 

With Sheets("Hidden") 
    .Range("A1").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, _ 
     SkipBlanks:=False, Transpose:=False 'I just pasted into cell A1 
End With 
Sheets("Overall").Activate 

このようなことが役立つことを祈っています。使用しているデータの種類はわかりませんが、ランダムに生成されたデータを隠しワークシートにコピーしています。

画面の点滅/ちらつきを避けるためにできるもう1つの方法は、マクロの先頭で画面の更新をオフにし、最後にもう一度オンにすることです。

Application.ScreenUpdating = False ' This should be the first line of a sub 
Application.ScreenUpdating = True ' This should be the last line of the sub 
関連する問題