УВА если условие работает нормально, но плохо себя ведет, когда добавляется другое заявление

голоса
-1

У меня есть этот код, приведенный ниже.

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

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

Задан 20/10/2018 в 05:38
источник пользователем
На других языках...                            


1 ответов

голоса
0

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

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

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

 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
Ответил 20/10/2018 в 10:19
источник пользователем

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more