如何为两个循环扩展Do Until IsEmpty循环?

时间:2017-07-24 13:59:52

标签: excel-vba loops is-empty vba excel

在Excel中,我有一列数据。我想将这一列数据用于循环。 下面的代码在遇到1个空行时停止。但是我需要循环再继续两步。

i = 1
Do Until IsEmpty(ActiveWorkbook.Worksheets("Data").Cells(i, 1).Value2)
    'do something...
i = i + 1
Loop

换句话说,是否有类似的东西:

Do Until IsEmpty(ActiveWorkbook.Worksheets("Data").Cells(i, 1).Value2) + 2

我希望我的问题很明确!

2 个答案:

答案 0 :(得分:1)

您需要一个新变量来跟踪此信息。您可以在现有的DO UNTIL循环中执行此操作:

i = 1
extraTwo = 1
Do Until IsEmpty(ActiveWorkbook.Worksheets("Data").Cells(i, 1).Value2) or extraTwo > 2
    'do something...
    i = i + 1
    if IsEmpty(ActiveWorkbook.Worksheets("Data").Cells(i, 1).Value2) then extraTwo = extraTwo + 1
Loop

或在外部循环中:

i = 1
Do Until IsEmpty(ActiveWorkbook.Worksheets("Data").Cells(i, 1).Value2)
    'do something...
    i = i + 1
Loop

For extraTwo = 1 to 2
    'do something...
    i = i + 1
    extraTwo = extraTwo + 1
Next

第一个意味着没有代码重复(即使你将do something...移动到一个函数或子程序,你必须复制调用),但第二个更明显的是发生了什么(尽管那个'#s; s值得商榷)。

答案 1 :(得分:1)

你可以使用

的内容
Dim numEmpties as Long
i = 1       
Do While True
    If IsEmpty(ActiveWorkbook.Worksheets("Data").Cells(i, 1).Value2) Then
        numEmpties = numEmpties + 1
        If numEmpties = 3 Then Exit Do
    End If
    'do something
    i = i + 1
Loop

这里我实际上是手动控制循环索引,并且以这种方式编写它是优雅的,因为IsEmpty测试只写了一次。 (这在C中是惯用的。)

相关问题