2016-06-24 1 views
0

다음 루프를 사용하여 다른 셀의 마지막으로 사용한 셀의 레벨 인 셀에 도달 할 때까지 루프를 수행했습니다. 그러나 그것은 마지막으로 사용 된 셀을 훨씬 넘어선 다. 괜찮습니다.하지만 30,000 행이 넘는 경우 특히 더 오래 실행해야합니다. 누구든지이 아이디어를 가지고 있습니까?For 루프가 매개 변수 VBA를 넘습니다.

Dim i As Long 
lMaxRows = Cells(Rows.Count, "K").End(xlUp).Row 
For i = 1 To lMaxRows 
    Range("D" & lMaxRows + 1).Select 
    ActiveCell.FormulaR1C1 = "0:00:00" 
    lMaxRows = Cells(Rows.Count, "E").End(xlUp).Row 
    Range("E" & lMaxRows + 1).Select 
    ActiveCell.FormulaR1C1 = "1" 
Next i 
+0

데이터가 예상보다 낮을 가능성이 높습니다. 또한 선택을 피하는 방법에 대해서는 [this] (http://stackoverflow.com/questions/10714251/how-to-avoid-using-select-in-excel-vba-macros)를 읽어야합니다. – Kyle

+0

당신이하고있는 일을 생각해 보면, 루프에서'lMaxRows'를 재설정하고'E & lMaxRows + 1'에 값을 설정하고 있으므로 루프의 끝까지 도달하지 않을 것입니다. ... –

+0

루프를 통과 할 때마다'lMaxRows'를 다시 계산합니다. –

답변

5

상위 워크 시트를 정의하지 마십시오. 한 번에 모든 셀을 선택하여 채우십시오.

With Worksheets("Sheet1") 
    With .Range(.Cells(1, "K"), .Cells(.Rows.Count, "K").End(xlUp)) 
     .Offset(0, -7) = "0:00:00" 
     .Offset(0, -6) = 1 
    End With 
End With 
+1

@ScottCraner - 나는 지페 드는 정신적으로 오늘 아침에 체크 아웃했다고 생각합니다 ... – BruceWayne

+1

@ BruceWayne은 그렇게 해왔습니다. –

+1

@ScottCraner 잡기 주셔서 감사합니다. 내 비 SO 판에 너무 많은 것들이 겉으로보기에 여기에 튀어 나와 보이는 문제를 해결합니다. 위의 수정 수정 됨. – Jeeped

0

나는 이것이 lMaxRows 사용법과 루프 때문인 것으로 생각합니다.

이 방법이 효과가 있습니까?

Sub t2() 
Dim lMaxRows&, xMaxRows& 
Dim i  As Long 
lMaxRows = Cells(Rows.Count, "K").End(xlUp).Row 
i = 1 
Do While i <= lMaxRows 
    Range("D" & lMaxRows + 1).FormulaR1C1 = "0:00:00" 
    xMaxRows = Cells(Rows.Count, "E").End(xlUp).Row 
    Range("E" & xMaxRows + 1).FormulaR1C1 = "1" 
    i = i + 1 
Loop 
End Sub 

샘플 데이터가 없으면 출력하고 싶은 것을 알기가 어렵습니다.