2017-01-23 3 views
0
Worksheets(ShtName).Range("D4:D91").Value = Worksheets("Builder").Range("C244:C331").Value 
'MsgBox ActiveSheet.Name 
Dim i As Long, j As Long, k As Long 
Dim N As Long 
N = Cells(Rows.Count, "A").End(xlUp).Row 
j = 2 
k = 1 

Dim rownum As Long 
Dim colnum As Long 
Dim data, result 
colnum = 1 

Dim rng As Range 
Dim counter As Integer 

Set rng = Worksheets(ShtName).Range("D4:D91") 

i = 1 

For counter = 1 To rng.Rows.Count 

    If rng.Cells(i) = "0" Then 
     rng.Cells(i).Cells.Delete 
    Else 
     i = i + 1 
    End If 

Next 

With Range("D4", Cells(Rows.Count, "D").End(xlUp)).Resize(, 2) 
data = .Value 
numrows = UBound(data) 
rownum = 4 

Range((Cells(5, 4)), (Cells(91, 4))).Copy 
Cells(4, 5).Select 
Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _ 
    False, Transpose:=True 

Cells(5, 4).Select 

Range("D5:D30").Delete Shift:=xlUp 
End With 

는 ABIT 내가 아는 지저분하지만 난 여러 번 사용할 때 시간이 오래 걸리는 삭제 방법 문제를 했어 질문 중 하나내 사본 및 tranpose "알고리즘"이 느린 이유는 무엇입니까?

+0

얼마나 느린가? 몇 가지 개선 사항이 있지만 코드가 왜 느려지는지 알 수는 없습니다. 비록 당신이 모든 코드를 게시하지 않은 것처럼 보입니다. – SJR

+0

트리거되는 이벤트가있을 수 있습니다. 이벤트를 사용 중지하고 마지막에 다시 사용하도록 설정하십시오. –

+2

코드가 작동하면 [codereview.se]에 가장 적합하다고 생각합니다. 코드의 의도와 의미에 대해 의미있는 제목을 제공하고, 코드의 의미에 대한 설명을 제공하고, 전체 작업 코드 (Sub 선언 포함)를 제공하도록 다시 포맷해야합니다. –

답변

0

을 요청하는 방법을 잘 모르겠 그것을 개선 할 수있는 방법 궁금합니다. 대신 .clear 메서드를 사용한 다음 끝에있는 모든 공백을 맨 아래에 정렬합니다.

+0

건 축하합니다. –

0
는 성능 문제의 원인이 될 가능성이 있지만 개선의 커플

:

대신 다음과 같이 오름차순으로 세포 (또는 행 또는 열을) 삭제

는 :

For counter = 1 To rng.Rows.Count 
    If rng.Cells(i) = "0" Then 
     rng.Cells(i).Cells.Delete 
    Else 
     i = i + 1 
    End If 
Next 

때문이다 Excel에서 일반적으로 더 나은은 다음과 같이 내림차순으로 삭제 :

For counter = rng.Rows.Count to 1 Step -1 
    If rng.Cells(counter) = "0" Then 
     rng.Cells(counter).Cells.Delete 
    End If 
Next 

이 두 "계산"변수에 대한 필요성을 제거하고 논리를 단순화합니다. 또한이 루프를 자체 함수/하위 - 아마도 function DeleteCellsEqualToZero(aRange as Range) as Integer으로 분리하는 것이 좋습니다.

함수의이 부분과 다른 부분을 별도의 함수/하위 부분으로 분리하면 성능 문제가있는 코드를 쉽게 찾을 수 있습니다.

+0

을 구현할 것입니다. , 감사! 확실히 그들을 바꿀 것입니다 –

+0

@Robot_enthusiast 질문에 관련성이 있고 유용한 정보를 제공 한 경우 내 대답을 upvote하십시오 :) – neizan

+0

나는 시도했지만 나는 충분한 두려움이 없습니다. 미안합니다 –

관련 문제