在两个条件下同时做

时间:2018-11-08 20:09:21

标签: excel-vba while-loop

我有这个Do While循环:

Sub TEST_LOOP()
Dim i As Integer
i = 2

Do While Cells(i, 3) <> "" And _
Int(Mid(Cells(i, 3), 12, 2)) = 21
    Value = Value + Cells(i, 4)
    i = i + 1
Loop

End Sub

应用于以下基本数据集: enter image description here

我收到一条错误消息:

  

“运行时错误'13':类型不匹配。

发生问题是因为当循环到达第一个空单元格(i = 7)时 然后将Int函数应用于空值Mid(Cells(i, 3), 12, 2不会给出任何结果)。因此,我想知道一旦有问题的单元格不满足两个条件,即是否不为空,并且涉及到21小时,是否有一种有效的方法退出循环。

1 个答案:

答案 0 :(得分:1)

您需要首先检查单元格值是否为日期,然后继续。看看是否有帮助:

Sub TEST_LOOP()

    Dim i As Long, ws As Worksheet
    Set ws = ActiveSheet

    For i = 2 To lastRow(ws, "C")
        If isDate(ws.Cells(i, 3)) Then

            If Int(Mid(ws.Cells(i, 3), 12, 2)) = 21 Then

                Value = Value + ws.Cells(i, 4)

            End If

        End If
    Next i

End Sub

Function lastRow(ws As Worksheet, Optional col As Variant = 1) As Long
    With ws
        lastRow = .Cells(.Rows.Count, col).End(xlUp).Row
    End With
End Function

问题在于,在IF()Do While语句中,所有内容都会得到评估-即使前一条语句返回FALSE。因此,您需要先检查您的单元格是否为日期,然后才能继续操作。