#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