excel 如何反转For循环

m1m5dgzv  于 2023-03-24  发布在  其他
关注(0)|答案(4)|浏览(156)

我的宏有一个问题。它删除了满足某些条件的行。但是当几个连续的行满足这些条件时,会发生错误。当删除行时,其他行上移,因此如果行(2:2)和行(3:3)满足条件,则删除行(2:2),并上移行(3:3),因此它成为行(2:2),For循环转到另一行(第三行)。因此,过去是行(3:3),现在是行(2:2)的行被忽略,而不是删除。
为了处理这个主题,我认为这是足够的逆转为循环,所以它不会去从上到下,但从下到上。TE resulat将是双重检查的一些行,但没有行会被省略。
问题是我不知道如何修改For循环。我试着把'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

先谢谢大家,
致以最诚挚的问候,
阿图尔·鲁特科夫斯基

f2uvfpb9

f2uvfpb91#

如果要循环并删除行,则需要从底部开始,然后向上操作:

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

那么删除行就不会中断循环。

hsvhsicv

hsvhsicv2#

循环向前:

For i = 1 To 10
    'Do something
Next i

向后循环(在for循环的末尾使用Step -1):

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

svujldwt3#

另一种方法是在每次删除后加上x=x-1,但是从下往上的方法更好。

1u4esq0p

1u4esq0p4#

此代码具有删除当前选择的整行的语法。
它也从底部开始,以降序方式步进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

相关问题