Найти дату, которая является ближайшей к желаемой дате, не проходя мимо и сопоставляя серийный номер - PullRequest
0 голосов
/ 29 мая 2018

У меня есть «столбец I» с данными для даты переделки и «столбец G» для даты сборки.В «столбце J» я хочу, чтобы результат использования «Дата доработки» находил дату, ближайшую к столбцу «Дата сборки», не переходя.Это может быть та же самая дата, что и сборка, или только что не законченная.Чтобы связать их вместе, «Серийный Rework» должен быть точно таким же, как «Серийный» в «столбце E».Примечание: мне нужно время там, так как некоторые случаи, которые происходят в один и тот же день, будут иметь разное время.

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

Я создал несколько столбцов, которые затем просматривали данныесделал vlookup на максимуме, но это привело бы к созданию столбца для каждой переделки в столбце, и это было бы слишком.Я мог бы обдумать это, но некоторые входные данные будут высоко оценены.

enter image description here

На рисунке показан фрагмент кода, который я пробовал вместе с Excel какВ целом я работаю с.В нем показан метод создания столбцов для экземпляра «Дата восстановления».

Попытка использовать VBA для просмотра всего столбца Serial и посмотреть, равен ли он Rework Serial, затем объединить это значение в столбце «L»..
Отсюда я надеялся также сравнить дату и вернуть значение даты, что это максимум, не переходя.Этот код работает для возврата в одну ячейку, как это будет сделано для каждой ячейки для каждой переделки?

Я получил дальнейшее, но по какой-то причине каждый третий раз в цикле он выдает ошибку

AssemD = DateValue(Cells(x,7))

с несоответствием типов.Я не понимаю этого, так как он работает без цикла For Each j, но я пытаюсь вложить его так, чтобы после того, как он выполнил все свои сравнения и нашел максимум, он затем записал этот максимум в Cells (y, 12), который являетсяу счетчик, который идет в ногу с J.

Sub RecentDate()
    Dim i As Range, j As Range, x As Integer, y As Integer, AssemD As Date, ReworkD As Double, AssemTi As Double, ReworkTi As Double, AssemTot As Double, ReworkTot As Double, MaxDate As Date
    x = 1
    y = 1
    'Set i = Range("E1:E12")
    For Each j In Range("I1:I12")
        For Each i In Range("G1:G12")
            AssemD = DateValue(Cells(x, 7))
            ReworkD = DateValue(Cells(1, 9))
            AssemTi = TimeValue(Cells(x, 7))
            ReworkTi = TimeValue(Cells(1, 9))
            AssemTot = CDbl(AssemD) + CDbl(AssemTi)
            ReworkTot = CDbl(ReworkD) + CDbl(ReworkTi)

            If ReworkTot >= AssemTot And Cells(1, 8) = Cells(x, 5) Then
                MaxDate = Cells(x, 7)
            End If
            Cells(x, 13) = MaxDate
            x = x + 1
        Next i
        Cells(y, 12) = MaxDate
        y = y + 1
    Next j
End Sub

1 Ответ

0 голосов
/ 30 мая 2018

Мне пришлось использовать VBA, но я получил его со следующим кодом.

Sub RecentDate()
    Dim i As Range, j As Range, x As Integer, y As Integer, AssemD As Date, ReworkD As Double
    Dim AssemTi As Double, ReworkTi As Double, AssemTot As Double, ReworkTot As Double, MaxDate As Date, LineFault As String
    x = 1
    y = 1
    'Set i = Range("E1:E12")
    For Each j In Range("I1:I12")
        For Each i In Range("G1:G12")
            AssemD = DateValue(Cells(x, 7))
            ReworkD = DateValue(Cells(y, 9))
            AssemTi = TimeValue(Cells(x, 7))
            ReworkTi = TimeValue(Cells(y, 9))
            AssemTot = CDbl(AssemD) + CDbl(AssemTi)
            ReworkTot = CDbl(ReworkD) + CDbl(ReworkTi)

            If ReworkTot >= AssemTot And Cells(y, 8) = Cells(x, 5) Then
                MaxDate = Cells(x, 7)
                LineFault = Cells(x, 6)
            End If
            Cells(x, 13) = MaxDate
            x = x + 1
        Next i
        x = 1
        Cells(y, 12) = MaxDate
        Cells(y, 14) = LineFault
        y = y + 1
        MaxDate = "1/1/1900 12:00"
        LineFault = ""
    Next j
End Sub

Я определенно задумался над этим.

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