VBA,如果条件正常,但添加else语句时行为异常

时间:2018-10-20 05:38:37

标签: excel vba excel-vba if-statement

我在下面有此代码。

Sub workbook_initialize()
    Dim cell As Excel.Range
    Dim LastRow As Long
    LastRow = Sheets("sheet1").Range("A" & Rows.Count).End(xlUp).Row
    For Each cell In Sheets("sheet1").Range("E1:E" & LastRow)
        For i = 1 To Sheets("sheet2").Range("A" & Rows.Count).End(xlUp).Row
            If cell.Value >= Sheets("Sheet2").Cells(i, 8).Value And cell.Value _
                 <= Sheets("Sheet2").Cells(i, 11).Value Then
                Sheets("Sheet1").Cells(cell.Row, 10).Value = _
                    Sheets("Sheet2").Cells(i, 3).Value
            End If
        Next i
    Next
End Sub

该代码的作用是遍历Sheet1中特定范围的单元格,并且如果任何一个单元格的值大于或等于{strong> 中的值,并且同时等于时间小于或等于在同一行上的Sheet2 Column H的值,然后使Sheet2 Column KSheet1 Column J中的相应单元格的值相同,这很好,但是当我在下面添加此行代码,不会产生预期的结果。

Sheet2 Column C

我将不胜感激。

1 个答案:

答案 0 :(得分:0)

从代码流和给出的描述中,我假设您要检查Sheet1 Col E的每个值是否在Sheet2 col H&K定义的限制之内,并且有一个相应的令牌值指示匹配范围是从Sheet2 Col 3,并将其放置在Sheet 1 col 10中。如果sheet1 Col e值不满足工作表2列出的所有范围内的任何范围,则将指示“无偏移”。

使用这种代码格式时,最好不要在这里使用else,因为您必须完成内部for循环以检查所有极限值以测试条件,然后仅满足“无移位”条件。 / p>

我稍微调整了一下代码。请尝试

 Dim cell As Excel.Range
    Dim LastRow As Long, found As Boolean
    LastRow = Sheets("sheet1").Range("A" & Rows.Count).End(xlUp).Row
    For Each cell In Sheets("sheet1").Range("E1:E" & LastRow)
    found = False
        For i = 1 To Sheets("sheet2").Range("A" & Rows.Count).End(xlUp).Row
            If cell.Value >= Sheets("Sheet2").Cells(i, 8).Value And cell.Value _
                 <= Sheets("Sheet2").Cells(i, 11).Value Then
                Sheets("Sheet1").Cells(cell.Row, 10).Value = _
                    Sheets("Sheet2").Cells(i, 3).Value
            found = True
            Exit For
            End If
        Next i
        If found = False Then Sheets("Sheet1").Cells(cell.Row, 10).Value = "No Shift"
    Next