Нахождение правильных повторяющихся значений в столбце и вырезание вставляем строки, найденные дублированными в соответствии с 2 критериями (значение и дата)

#vba #if-statement

Вопрос:

Сейчас я застрял, пишу код, чтобы найти дубликаты в листе ячеек. То, что я пытаюсь сделать, — это первый шаг к :

У меня есть список данных, который заполняет столбцы от A до AQ и сотни строк. для первой строки это строка 5, потому что над ней есть заголовки

Я хочу обнаружить строки, которые имеют одинаковое значение в столбце H (например, дублируют значения в ячейках столбца H), затем для обнаруженных строк проверьте еще 2 переменные. Если ячейка в строке в столбце Q и когда она обнаруживает строку с аналогичным значением где-то на листе, допустим, она находится в строке 8 (но она может быть где угодно на листе), это будет Q8), поэтому, если Q8 = «пусто» (слово не пустая ячейка), тогда я хочу скопировать все данные в этой строке из A8 в AP8 и вставить строку РЯДОМ со строкой, имеющей то же значение в столбце H (H5), поэтому вставьте ее в ячейки AQ5 в CF5. Тогда, если Q8 >>: Если R8>S5, то скопируйте и вставьте найденную 2-ю строку из строки A8 в AP8, из CG5 в DV5 (из первой найденной строки). Если R8

Найденных дубликатов может быть до 5, возможно. Я написал следующий код ниже без копирования (вырезания) и вставки. Потому что я хочу сначала увидеть результат, как только я буду уверен в коде, я удалю значение =и заменю его вырезанием и вставкой.

Но прямо сейчас я все еще застрял, спасибо за любезную помощь:

 Sub dup_cp()

Dim i As Integer
Dim j As Integer
Dim k As Integer

With Sheets("Vacant List")
    j = Application.CountA(.Range("A:A"))
    'counts the number of filled in rows

    For i = 5 To j
    'it starts from line 5 on purpose, the numbers start from that line
        For k = i   1 To j
            If .Cells(k, 8).Value = "Duplicate Value" Then GoTo skip_dup
            'it skips the line that has already been detected as duplicated

                If .Cells(k, 8).Value = .Cells(i, 8).Value Then
                'it finds the duplicate value in the eight column
                
                    If .Cells(k, 17).Value = "VACANT" Then
                        .Range(.Cells(i, 43), .Cells(i, 84)).Value = .Range(.Cells(k, 1), .Cells(k, 42)).Value
                    'it checks whether the cell i17 has the word "vacant" in it and then copy it in the middle range
                
                    Else
                        If .Cells(k, 18).Value > .Cells(i, 19).Value Then
                    'it compares the 18th column values (the modified duration of the components) and keeps the earlier date for comparison reasons
                            .Range(.Cells(i, 85), .Cells(i, 126)).Value = .Range(.Cells(k, 1), .Cells(k, 42)).Value
                        Else
                            .Range(.Cells(k, 85), .Cells(k, 126)).Value = .Range(.Cells(i, 1), .Cells(i, 42)).Value
                    End If
                End If
            End If
            
skip_dup:
        Next
    Next
    End With
End Sub