Я нашел обходной путь, который требует дополнительных ручных шагов, но все же быстрее, чем исправление данных построчно.Это также требует от меня разделения данных перед отправкой по названию должности и полностью зависит от их сортировки определенным образом для правильной работы.
Сначала выполните следующие сортировки:
-Sort Job EndДата от А до Я
-Сортировка Дата начала работы от А до Я
-Сортировка Провайдера от А до Я
Затем я добавляю 3 новых столбца в конце моегонабор данных:
Новый столбец 1: Проверка даты окончания - чтобы указать проверяемую дату окончания для пустых ячеек Дата окончания задания
=IF(R2="",TODAY(),R2)
Новый столбец 2: Q <= выше AE - Должен начинаться сстрока 3. Если поставщик (имя) в приведенной выше строке совпадает, проверьте, не является ли дата начала работы меньше или равна дате окончания работы в строке выше. </p>
=SUMPRODUCT((B3=OFFSET(B3,-1,0))*(Q3<=OFFSET(AE3,-1,0)))
Новый столбец 3: IFAF = 1, AE> = выше AE - должно начинаться с строки 3. Если новый столбец 2 равен 1, проверьте, больше ли дата окончания или равна дате окончания над ним.
=SUMPRODUCT((AF3=1)*(AE3>=OFFSET(AE3,-1,0)))
КонецРезультат со скрытыми ненужными столбцами выглядит следующим образом: Образец данных Excel 2
После подготовки dАта я запускаю следующий макрос.Это начнется в ячейке AF3, проверьте, является ли значение ячейки 1, если нет, то увеличит значение текущей строки (C_Row) и предыдущей строки (P_Row) на 1 и проверит снова, пока не достигнет пустой ячейки.,Если ячейка AF равна 1, она также проверит, равна ли соответствующая ячейка AG 1.Если AG равен 1, он скопирует значение текущей строки Дата окончания задания и вставит его в качестве значения только в дату окончания задания предыдущей строки и удалит текущую строку, создав таким образом самый большой перекрывающийся период времени в одной строке и удаливконфликтный ряд.Если AE не равно 1, он просто удалит текущую строку, поскольку перекрывающиеся даты полностью попадают в строку над ней.
Sub Aging_Overlapping_Dates()
Dim C_Row As Long: C_Row = 3
Dim P_Row As Long: P_Row = 2
'Loops until AF = Blank
Do While Not Cells(C_Row, "AF") = ""
'Checks if AF is 1
If Cells(C_Row, "AF") = 1 Then
'If AF is 1, check if AG is 1
If Cells(C_Row, "AG") = 1 Then
'Moves Job End Date to the previous row and deletes current row
Cells(C_Row, "R").Copy
Cells(P_Row, "R").PasteSpecial xlPasteValues
Rows(C_Row).Select
End If
'Deletes Current Row if AF or AG is 1
Rows(C_Row).Select
Selection.EntireRow.Delete
Else
'Increase row count if row was not deleted
C_Row = C_Row + 1
P_Row = P_Row + 1
End If
Loop
End Sub