2017-10-04 1 views
1

나는 VBA에 매우 익숙하며 아래에 약간의 조언을 원합니다. 현재 특정 날짜를 필터링하여 별도의 시트에 다음 = 부양 요법. VBA는 작동하지만 원하는 것보다 약간 오래 걸립니다. 누구든지 내게 해결책을 제발 제공 할 수, 나는 이것을 봤어 그리고 단축 될 때 작동하도록 얻을 수 없습니다.복사 및 붙여 넣기 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를 사용하는 대신 활성화하십시오.

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 

나는 이것이 도움이되기를 바랍니다. 어떤 유형의 데이터를 사용하고 있는지 모르겠지만 무작위로 생성 된 데이터를 숨겨진 워크 시트에 복사했습니다.

화면 깜박임/깜박임을 피하기 위해 수행 할 수있는 또 다른 조치는 매크로 시작시 화면 갱신을 끄고 마지막에 다시 켜는 것입니다.

Application.ScreenUpdating = False ' This should be the first line of a sub 
Application.ScreenUpdating = True ' This should be the last line of the sub