programing

For 루프를 되돌리는 방법

telebox 2023. 6. 21. 22:31
반응형

For 루프를 되돌리는 방법

매크로에 문제가 있습니다.특정 기준을 충족하는 행을 삭제합니다.그러나 몇 개의 연속 행이 해당 기준을 충족하면 오류가 발생합니다.행이 삭제되면 다른 행(예: 행(2:2)과 행(3:3)이 기준을 충족하도록 위로 이동한 다음 행(2:2)이 삭제되고 행(3:3)이 위로 이동하여 행(2:2)이 되고 For 루프는 다른 행(세 번째 행)으로 이동합니다.결과적으로 행(3:3)이었던 행(2:2)은 삭제되지 않고 생략됩니다.
이 주제를 다루기 위해서는 For 루프로 되돌리기에 충분하다고 생각하기 때문에 위에서 아래로 가는 것이 아니라 아래에서 위로 가는 것입니다.결과적으로 일부 행을 이중으로 확인하지만 생략되는 행은 없습니다.
문제는 제가 For 루프를 reveve하는 방법을 모른다는 것입니다.'For x = startrow To endrow'를 'For x = endrow To startrow'로 변경하려고 했지만 도움이 되지 않았습니다.
코드는 다음과 같습니다.

Sub Repurchase_upload()

Dim Worksheet As Worksheets
startrow = Worksheets("GUTS").Cells(10, 1)
endrow = Worksheets("GUTS").Cells(11, 1)

 For x = startrow To endrow 'I have tried to change this line into: 'For x = endrow To startrow', but it didn' help
            If Cells(x, "A").Value <> "AA" And Cells(x, "A").Value <> "AB" And Cells(x, "A").Value <> "AC" And Cells(x, "A").Value <> "AD" And Cells(x, "A").Value <> "AE" And     Cells(x, "A").Value <> "AH" And Cells(x, "A").Value <> "AI" And Cells(x, "A").Value <> "AF" And Cells(x, "A").Value <> "AG" Then
            Cells(x, "A").EntireRow.Delete

            End If



    Next
End Sub  

여러분, 미리 감사드립니다.
안부와 함께,
아르투르 루트코프스키

행을 반복하고 삭제하는 경우 맨 아래에서 시작하여 다음 작업을 수행해야 합니다.

For x = endrow To startrow step -1
   'Execute code
Next x

그런 다음 행을 삭제해도 루프가 중단되지 않습니다.

앞으로 루프:

For i = 1 To 10
    'Do something
Next i

뒤로 루프(사용)Step -1for 루프 끝):

For i = 10 To 1 Step -1
    'Do something
Next i

또 다른 방법은 삭제할 때마다 x=x-1을 넣는 것입니다.하지만 밑에서 일하는 것이 더 좋습니다.

이 코드에는 현재 선택한 항목의 전체 행을 삭제하는 구문이 있습니다.

또한 하단에서 시작하여 For 루프를 내림차순으로 계단식으로 진행합니다.

Dim startingRow As Integer
Dim y As Integer
Dim checkGross As Double
    
    startingRow = Sheets("Stripe").Cells(Rows.Count, 13).End(xlUp).Row 'Gets the row number of the last record in column 13'
    Sheets("Stripe").Range("M" & startingRow).Select
    
    For y = startingRow To 3 Step -1 'Ending at 3 because Rows 2 and 1 are header rows-- Step -1 makes the y counter descend'
        checkGross = Sheets("Stripe").Range("M" & y).Value
        If checkGross < 0 Then
            Sheets("Stripe").Range("M" & y).EntireRow.Delete
        End If
    Next y

언급URL : https://stackoverflow.com/questions/17944074/how-to-reverse-a-for-loop

반응형