2017-10-31 10 views
0

나는 도박 계산을 위해 매크로를 수행하고 있습니다. 나는 경우와 일치하는 행을 삭제하는 루프에 대해 다음 더블을 가지고 있지만 정말 VBA 내 for 루프는 행의 절반 만 삭제합니다.

Sub calc() 

    Dim db As String 
    db = Worksheets("PRONO").Range("A1").Value 

    Dim alldata As Workbook 
    Dim i1 As Worksheet 

    Set alldata = Workbooks(db) 
    Set i1 = alldata.Worksheets("I1") 



    For Each Match In Workbooks("BET EXCEL.xlsm").Worksheets("TEST").Range("A14:" & Range("A14").End(xlDown).Address) 

     For Each Data In i1.Range("B2:" & i1.Range("B2").End(xlDown).Address) 

      If CDate(Data.Value) > CDate(Match.Value) Then 
       MsgBox (Data.Row) 
       i1.Rows(Data.Row).Delete 

      End If 

     Next 




    Next 


End Sub 

일치하는 행의 절반을 삭제?

나는

사람이 간단 나

+3

내부 루프가 뒤로 루프해야합니다. –

답변

1

을 도울 수 있다면 이해할 수 없습니다. 다섯 번째 행을 지우면 아래의 모든 행이 위로 이동합니다. 그래서 여섯 번째 행은 이제 다섯 번째입니다. 그러나 당신의 루프는 최근 여섯 번째 (이전의 일곱 번째)로 갔고, 여섯 번째였던이 것을 뛰어 넘었습니다. 행을 위로 삭제하려면 FOR i = lastRow to 1 STEP -1을 사용하십시오. (이전에 ah, lastRow를 계산해야합니다).

+0

그래, 그게 해결책이라고 생각해. 그냥 2 셀을 비교해야 해. 내면에서 그들을 어떻게 비교할 수 있습니까? – lisarko8077

+0

내부 루프 카운터가 iCount 인 경우 셀을 il..Range ("B"& iCount)로 참조 할 수 있습니다 – MarcinSzaleniec

+0

정수로 i 및 lastRow를 선언해야하는 이유는 입력시 오류가 발생합니다 – lisarko8077