2014-04-08 5 views
0

저는 큰 정보 테이블을 가지고 있습니다. 내가 뭘 하려는지 필터 및 특정 행을 삭제합니다 (총 열에 비어 있음).많은 양의 데이터를 필터링하고 행을 삭제하려고 시도합니다.

코드는 영원히 걸립니다. 테이블에 30,000 개가 넘는 행이 있습니다.

총계는 VBA에 의해 생성 된 수식이 아니므로 수식의 속도가 느려지지 않습니다. 나는 도움이되어야한다 그래서 그것을 실행할 때 Application.ScreenUpdating = False가있다.

나는 더 빨리 달리는 방법을 모르겠다. 나는 루프가 더 느리지 만 다른 방법을 시도해 보는 것이 행복하다고 생각했을 것이다.

Application.ScreenUpdating = False 

lngLastRow = Worksheets("report").Cells(Rows.Count, "b").End(xlUp).Row 
Set rngFilter = Worksheets("report").Range("B7:n" & lngLastRow) 
rngFilter.AutoFilter Field:=13, Criteria1:="0.00" 

With ActiveSheet.AutoFilter.Range 
    On Error Resume Next 
    Set rng2 = .Resize(.Rows.Count - 1, 1) _ 
     .Offset(1, 0).SpecialCells(xlCellTypeVisible).EntireRow.Delete 
    On Error GoTo 0 
End With 

ActiveSheet.ShowAllData 

Application.ScreenUpdating = True 
+2

코드에서 가장 느린 작업은 _ 행을 삭제하는 것입니다. 연속적으로 _non_ 연속 행을 삭제하는 것은 느리지 만 인접 행을 매우 빠르게 삭제합니다. 조건에 따라 열의 범위를 정렬 한 다음 행을 필터/삭제할 수 있습니다. –

+0

감사합니다. 잘하면 잘될 것입니다. 그것은 코드를 기록하려고 할 때 Excel에서 수행 할 때와 같습니다. –

+0

삭제가 필요한 행 번호의 목록을 수집하고, 범위를 배열로 던지고, 행을 삭제하고, 다시 배열하고 범위에 다시 배치 할 수 있습니다. 배열 작업은 항상 훨씬 빠릅니다. –

답변

1

당신은

Dim ws As Worksheet 
For Each ws In ActiveWorkbook.Worksheets 
    ws.EnableCalculation = False 
Next 

그리고 물론

가 이후에 다시는 코드가 excecuted되는 시간을 떨어져 수식 계산을 돌려 calculted 세포가 많이 포함 된 경우 약간의 회전 속도를 높일 수 코드가 발췌되었습니다

+0

가봐야 겠어. –

관련 문제