2016-10-20 8 views
0

매크로가 있는데 그 매크로는 i에서 시작하여 n에서 끝납니다. n은 동적 범위의 끝입니다. 매크로는 행을 추가하고 다양한 기준에 따라 데이터를 입력합니다. 이 코드는 매우 잘 작동하지만 'n'이 끝나기 전에 전체 범위의 85 % 만 차지합니다. 거꾸로 반복 할 필요가i에서 n까지의 루프를 사용하여 동적으로 행을 추가하지만 전체 범위를 포함하지 않습니다.

Sub AddExtrasFerry() 

Dim i As Long 
Dim n As Long 

n = Sheets("Original").Cells(Rows.Count, "A").End(xlUp).Row 

Sheets("Original").Select 

For i = 10 To n 

    If Cells(i, 16).Value <> "" And Cells(i, 3).Value Like "Wood*" And Cells(i, 16).Value = 100 Then 
     Cells(i + 1, 16).EntireRow.Insert 
     Cells(i + 1, 1).EntireRow.Value = Cells(i, 1).EntireRow.Value 
     Cells(i + 1, 6).Value = 100 
     Cells(i + 1, 1).Value = 20430 
     Cells(i + 1, 11).Value = "" 
     Cells(i + 1, 12).Value = "" 
     Cells(i + 1, 15).Value = "" 
     Cells(i + 1, 16).Value = "" 

    ElseIf Cells(i, 16).Value <> "" And Cells(i, 3).Value Like "Wood*" And Cells(i, 16).Value > 100 Then 
     Cells(i + 1, 16).EntireRow.Insert 
     Cells(i + 1, 1).EntireRow.Value = Cells(i, 1).EntireRow.Value 
     Cells(i + 1, 6).Value = 100 
     Cells(i + 1, 1).Value = 20430 
     Cells(i + 1, 11).Value = "" 
     Cells(i + 1, 12).Value = "" 
     Cells(i + 1, 15).Value = "" 
     Cells(i + 1, 16).Value = "" 

     Cells(i + 2, 16).EntireRow.Insert 
     Cells(i + 2, 1).EntireRow.Value = Cells(i, 1).EntireRow.Value 
     Cells(i + 2, 6).Value = Cells(i, 16).Value - 100 
     Cells(i + 2, 1).Value = 20305 
     Cells(i + 2, 11).Value = "" 
     Cells(i + 2, 12).Value = "" 
     Cells(i + 2, 15).Value = "" 
     Cells(i + 2, 16).Value = "" 

     i = i + 1 
     n = Sheets("Original").Cells(Rows.Count, "A").End(xlUp).Row 
    ElseIf Cells(i, 16).Value <> "" Then 
     Cells(i + 1, 16).EntireRow.Insert 
     Cells(i + 1, 1).EntireRow.Value = Cells(i, 1).EntireRow.Value 
     Cells(i + 1, 6).Value = Cells(i, 16).Value 
     Cells(i + 1, 1).Value = 20305 
     Cells(i + 1, 11).Value = "" 
     Cells(i + 1, 12).Value = "" 
     Cells(i + 1, 15).Value = "" 
     Cells(i + 1, 16).Value = "" 
     i = i + 1 
     n = Sheets("Original").Cells(Rows.Count, "A").End(xlUp).Row 
    End If 
Next i 

End Sub 
+0

당신은 당신의 첫 번째 블록의 경우에 행을 삽입 하지만 당신은 n을 재정의하지 않습니다. 다른 블록 에서처럼 n을 재정의해야합니다. 또한 i를 증가시켜야합니다. 또한 두 번째 블록에서 두 행을 추가 할 때 i를 2 씩 증가시켜야합니다. –

답변

0

추가하거나 삭제하는 경우 행 또는 당신은 엉망 귀하의 색인을거야,이 시도 : 아래 코드를 볼

Sub AddExtrasFerry() 

Dim i As Long 
Dim n As Long 

n = Sheets("Original").Cells(Rows.Count, "A").End(xlUp).Row 

Sheets("Original").Select 

For i = n To 10 step - 1 

    If Cells(i, 16).Value <> "" And Cells(i, 3).Value Like "Wood*" And Cells(i, 16).Value = 100 Then 
     Cells(i + 1, 16).EntireRow.Insert 
     Cells(i + 1, 1).EntireRow.Value = Cells(i, 1).EntireRow.Value 
     Cells(i + 1, 6).Value = 100 
     Cells(i + 1, 1).Value = 20430 
     Cells(i + 1, 11).Value = "" 
     Cells(i + 1, 12).Value = "" 
     Cells(i + 1, 15).Value = "" 
     Cells(i + 1, 16).Value = "" 

    ElseIf Cells(i, 16).Value <> "" And Cells(i, 3).Value Like "Wood*" And Cells(i, 16).Value > 100 Then 
     Cells(i + 1, 16).EntireRow.Insert 
     Cells(i + 1, 1).EntireRow.Value = Cells(i, 1).EntireRow.Value 
     Cells(i + 1, 6).Value = 100 
     Cells(i + 1, 1).Value = 20430 
     Cells(i + 1, 11).Value = "" 
     Cells(i + 1, 12).Value = "" 
     Cells(i + 1, 15).Value = "" 
     Cells(i + 1, 16).Value = "" 

     Cells(i + 2, 16).EntireRow.Insert 
     Cells(i + 2, 1).EntireRow.Value = Cells(i, 1).EntireRow.Value 
     Cells(i + 2, 6).Value = Cells(i, 16).Value - 100 
     Cells(i + 2, 1).Value = 20305 
     Cells(i + 2, 11).Value = "" 
     Cells(i + 2, 12).Value = "" 
     Cells(i + 2, 15).Value = "" 
     Cells(i + 2, 16).Value = "" 

    ElseIf Cells(i, 16).Value <> "" Then 
     Cells(i + 1, 16).EntireRow.Insert 
     Cells(i + 1, 1).EntireRow.Value = Cells(i, 1).EntireRow.Value 
     Cells(i + 1, 6).Value = Cells(i, 16).Value 
     Cells(i + 1, 1).Value = 20305 
     Cells(i + 1, 11).Value = "" 
     Cells(i + 1, 12).Value = "" 
     Cells(i + 1, 15).Value = "" 
     Cells(i + 1, 16).Value = "" 
    End If 
Next i 

End Sub 
+0

안녕하세요 톰, 약 20 분 후에 "Excel에서 사용 가능한 리소스로이 작업을 완료 할 수 없습니다. 더 적은 데이터를 선택하거나 다른 응용 프로그램을 닫으십시오"라고 말한 후 실패했습니다 – user1

+0

거꾸로 반복하는 경우 n 재정의를 계속하지 않아도됩니다. –

+0

또한 점이 증가하지 않습니다. 나는 1을 여기로 들었다. –