嵌套循环在VBA中不能正确循环-一个有效,另一个有效

嵌套循环在VBA中不能正确循环-一个有效,另一个有效,vba,excel,excel-2010,nested-loops,Vba,Excel,Excel 2010,Nested Loops,我有一个复杂的项目,我正在做。对于这一步,我试图让程序在一定数量的行(我使用For循环)内重复一定次数(我尝试使用Do-Until循环)。行数比我希望程序循环的次数要大(大得多)。我之所以尝试使用两个循环,是因为我想在I范围内的每一行中搜索各种条件,但我只想更改前n个匹配项。因为我不知道比赛的地点和距离,我需要搜索整个9000+范围 到目前为止,for循环本身是有效的,但我不知道如何成功地添加Do-Until循环。我试过在内部和外部使用For循环,但都不起作用 在本例中,for循环位于内部。它应

我有一个复杂的项目,我正在做。对于这一步,我试图让程序在一定数量的行(我使用For循环)内重复一定次数(我尝试使用Do-Until循环)。行数比我希望程序循环的次数要大(大得多)。我之所以尝试使用两个循环,是因为我想在I范围内的每一行中搜索各种条件,但我只想更改前n个匹配项。因为我不知道比赛的地点和距离,我需要搜索整个9000+范围

到目前为止,for循环本身是有效的,但我不知道如何成功地添加Do-Until循环。我试过在内部和外部使用For循环,但都不起作用

在本例中,for循环位于内部。它应该是9,而不是9057(E的值):

我想,下一个外部带有for循环的示例会更好一些?调试只打印到9,所以这很好。不幸的是,For循环似乎根本没有运行,因为颜色没有改变。(仅粘贴内部代码,因为所有DIM都相同)

我想把n=0放在循环中,但那只会打印1900次,对吗


你们能帮我把这个修好让它正常运行吗?我已经阅读了三天的循环教程,但我无法让它正常工作:(我非常感谢任何帮助!

我不知道我是否正确阅读了您的问题,因此这是对您要求的猜测

以下内容读取所有行(
E
),但计算
n
中有多少匹配/更改,并在
n
高于9时停止进行这些更改

n = 0

For i = 1 To E
    If n < 10 And Cells(i, 15).Value = s3 And Cells(i, 13).Value = rA And Cells(i, 11) = "" Then
        Cells(i, 15).Interior.ColorIndex = 0
        n = n + 1
    End If
Next i
n=0
对于i=1到E
如果n<10和单元格(i,15)。值=s3和单元格(i,13)。值=rA和单元格(i,11)=“”,则
单元格(i,15)。Interior.ColorIndex=0
n=n+1
如果结束
接下来我

我想,我会做一些与CLR提供的答案非常相似的事情,但会像下面这样稍微更改,因此您会通过
I=1到E
,但只要
n=9
我就会退出循环以节省资源:

n = 0

For i = 1 To E
    If Cells(i, 15).Value = s3 And Cells(i, 13).Value = rA And Cells(i, 11) = "" Then
        Cells(i, 15).Interior.ColorIndex = 37
        n = n + 1
    End If

    If n = 9 Then Exit For
Next i

根据您的具体操作,在Excel中循环列和行是一项标准任务。假设您的任务是在20个Excel列中生成一些数据,如下所示:

然后,您的任务是循环遍历每行的每一列,如果它可以被7整除,则将其涂成红色:

那么,使用两个嵌套循环的解决方案可能是最简单的决策-一个行循环,每一行循环通过列:

Public Sub GenerateSomeData()

    Dim someRows As Long
    Dim someCols As Long

    Cells.Clear

    'GenerateSomeData
    For someRows = 1 To 100
        For someCols = 1 To 20
            Cells(someRows, someCols) = someRows + someCols
        Next someCols
    Next someRows

    'Search for values divisable by 7:
    For someRows = 1 To 100
        For someCols = 1 To 20
            If Cells(someRows, someCols) Mod 7 = 0 Then
                Cells(someRows, someCols).Interior.Color = vbRed
            End If
        Next someCols
    Next someRows

End Sub

你能做一些吗?用一句话解释两个循环应该做什么,最多20个单词。i循环应该在一个范围内搜索匹配项,n循环应该限制i循环迭代的次数。哇,这根本不对,是不是
n
可能不应该在
for
循环的每个
上增加,而是在
循环之后(以前的)。我想你应该使用2
进行
循环,这将是最好的。非常感谢!你成功地理解了我的问题,并提出了一个超级简单的神奇解决方案。我最终添加了其他人所包含的行,但我真的很感谢你的回答没有问题。请参阅我对Xabier答案的评论,了解我这样写的原因。很高兴你都很高兴。祝你好运!我一直在沿着这条路线走,直到我读到“我想搜索I范围内的每一行,以获得各种条件”-我假设以后循环中会有更多关于其他“各种标准”的
If
语句..但问题相当模糊。我计划使用变量引用电子表格上的单元格,所以我(或者更可能是其他人)可以更改标准,而无需进入VBA@Sylphie是的,它仍然可以工作,只需将
n=9
替换为
n=yourvariable
n = 0

For i = 1 To E
    If Cells(i, 15).Value = s3 And Cells(i, 13).Value = rA And Cells(i, 11) = "" Then
        Cells(i, 15).Interior.ColorIndex = 37
        n = n + 1
    End If

    If n = 9 Then Exit For
Next i
Public Sub GenerateSomeData()

    Dim someRows As Long
    Dim someCols As Long

    Cells.Clear

    'GenerateSomeData
    For someRows = 1 To 100
        For someCols = 1 To 20
            Cells(someRows, someCols) = someRows + someCols
        Next someCols
    Next someRows

    'Search for values divisable by 7:
    For someRows = 1 To 100
        For someCols = 1 To 20
            If Cells(someRows, someCols) Mod 7 = 0 Then
                Cells(someRows, someCols).Interior.Color = vbRed
            End If
        Next someCols
    Next someRows

End Sub