vba, если условие работает нормально, но плохо себя ведет, когда добавляется оператор else - PullRequest
0 голосов
/ 20 октября 2018

У меня есть этот код ниже.

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 и, если любая ячейка имеет значение , большее или равное значению в Sheet2 Column H и нав то же время меньше или равно значению Sheet2 Column K в той же строке, затем задайте Sheet1 Column J то же значение, что и соответствующая ячейка в Sheet2 Column C, что прекрасно работает, но когда я добавляю эту строку кода ниже, это не дает ожидаемого результата.

 Else
    Sheets("Sheet1").Cells(cell.Row, 10).Value = "No Shift"

Буду признателен за любую помощь, которую смогу получить.

1 Ответ

0 голосов
/ 20 октября 2018

Исходя из потока кода и приведенного описания, я предполагаю, что вы хотите проверить, что каждое значение Sheet1 Col E находится в пределах, определенных Sheet2 col H & K, и соответствующее значение токена, указывающее соответствующий диапазон, должно быть получено изЛист 2 Кол 3 и должен быть помещен в Лист 1 кол 10. Если значение Кол1 листа 1 не удовлетворяет ни одному из диапазонов во всех диапазонах, перечисленных в листе 2, следует указать «Без сдвига».

Св этом формате кода лучше не использовать else здесь, так как вам необходимо завершить внутренний цикл for, чтобы проверить все предельные значения для проверки условий, а затем выполнить только условие «Без сдвига».

Iнемного подправил свой код. Пожалуйста, попробуйте

 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...