Использование Year (Date) в выражении IF, но без вывода - PullRequest
0 голосов
/ 06 февраля 2019

Я пытаюсь получить данные из трех столбцов в моей рабочей книге AK, AL и AM соответственно.После получения данных я делаю 3 различных сравнения, которые указаны в приведенном ниже коде.

Сначала я сравниваю дату в столбце AL и столбце AM.Я проверяю, имеет ли столбец AL год 2018, а столбец AM не год 2018. Если это правда, то в столбец L будет вставлен текст, называемый «Обычный».Это делается ячейка за ячейкой с использованием цикла for, как видно из кода.

Затем выполняется проверка, имеет ли столбец AM год 2018, а столбец AK имеет цветовую кодировку Желтый .Если это правда, то текст будет вставлен в столбец L с именем «Новый».

Наконец, есть проверка, если столбец AM имеет год 2018 и столбец AK не окрашен в желтый .Если это правда, тогда текст будет вставлен в столбец «L» с именем «Major»

Иначе. Ячейка останется пустой без каких-либо данных.

ПРОБЛЕМА: Код работает нормально инет проблем или ошибок.Но я не могу получить желаемый результат.Код не вставляет текст в столбец L

Dim j As Long
Dim lastrow As Long
Dim ws1 As Worksheet
Dim wbk As Workbook
Dim wb As Worksheet
Dim date1 As Date, date2 As Date

Set wbk = Application.Workbooks("MaxiTrak RV Service Report - Blank.xlsm")
Set ws1 = wbk.Worksheets("ML_PSV_SERVICE")

lastrow = ws1.range("AL" & Rows.Count).End(xlUp).Row

    For j = 2 To lastrow

    date1 = ws1.Cells(j, 38).Value
    date2 = ws1.Cells(j, 39).Value

        If Year(date1) = Year(Date) - 1 And Year(date2) <> Year(Date) - 1 Then
            Cells(j, 12).Value = "Routine"
            If Year(date2) = Year(Date) - 1 And Cells(j, 37).Interior.ColorIndex = 6 Then
                Cells(j, 12).Value = "New"
                If Year(date2) = Year(Date) - 1 And Cells(j, 37).Interior.ColorIndex <> 6 Then
                    Cells(j, 12).Value = "Major"
                Else
                    Cells(j, 12).Value = ""
                End If
            End If
        End If
    Next j

Ожидаемый пример вывода

Ответы [ 3 ]

0 голосов
/ 06 февраля 2019

Из вашего описания, я полагаю, у вас слишком много операторов if.У вас также есть оператор if, вложенный в другой оператор if.

Dim j, lastrow As Long
Dim ws1, wb As Worksheet
Dim wbk As Workbook
Dim dateAL, dateAM As Date
Dim colorID As Variant

Set wbk = Application.Workbooks("MaxiTrak RV Service Report - Blank.xlsm")
Set ws1 = wbk.Worksheets("ML_PSV_SERVICE")

lastrow = ws1.Range("AL" & Rows.Count).End(xlUp).Row
currentyear = Year(Date)

For j = 2 To lastrow

    dateAL = Year(ws1.Cells(j, 38).Value) ' column AL
    dateAM = Year(ws1.Cells(j, 39).Value) ' column AM
    colorID = ws1.Cells(j, 37).Interior.ColorIndex

    If dateAL = currentyear - 1 And dateAM <> currentyear - 1 Then
        Cells(j, 12).Value = "Routine"
    Else
        If dateAM = currentyear - 1 And colorID = 6 Then
            Cells(j, 12).Value = "New"
        Else
            Cells(j, 12).Value = "Major"
        End If
    End If

Next j

Попробуйте приведенный выше код, но, пожалуйста, просмотрите код ПЕРВЫЙ.

0 голосов
/ 07 февраля 2019

Попробуйте код ниже, это довольно просто и не требует пояснений:

Sub Compare()
    Dim lastRow As Long, i As Long
    lastRow = Range("AK" & Rows.Count).End(xlUp).Row
    For i = 1 To lastRow
        If Year(Range("AM" & i)) <> 2018 Then
            If Year(Range("AL" & i)) = 2018 Then Range("L" & i) = "Routine"
        ' column AM has year equal to 2018
        ElseIf Range("AK" & i).Interior.ColorIndex = 6 Then
            Range("L" & i) = "New"
        Else
            Range("L" & i) = "Major"
        End If
    Next
End Sub
0 голосов
/ 06 февраля 2019

В приведенном ниже коде у вас есть:

            If Year(date2) = Year(Date) - 1 And Cells(j, 37).Interior.ColorIndex = 6 Then
                Cells(j, 12).Value = "New"
                If Year(date2) = Year(Date) - 1 And Cells(j, 37).Interior.ColorIndex <> 6 Then
                    Cells(j, 12).Value = "Major"
                Else
                    Cells(j, 12).Value = ""
                End If
            End If

Где вы попадаете в первый оператор if, потому что cells(j,37).interior.colorindex = 6, но затем вы делаете проверку, где cells(j,37).interior.colorindex <> 6.

Конфликт здесь в том, что он всегда будет установлен cells(j,12).value = "".Либо ваша первая ссылка на ячейку отключена, либо ваша вторая ссылка выключена.Другая возможность заключается в том, что вам нужно изменить одно из значений colorindex.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...