Дублировать в vba

#excel #excel-2010 #vba

#excel #excel-2010 #vba

Вопрос:

Допустим, у меня есть таблица с 4 столбцами: Id (col23), Group (col 5), Option (col24) amp; value (col 12). Это упрощенный пример, и номера col — это числа в моей реальной электронной таблице. То, что я пытаюсь сделать, это удалить повторяющиеся строки, когда в столбце id имеется более одной строки с одинаковым идентификатором. Этот бит работает с использованием следующего кода:

 Sub data()

Dim LastRow As Long
Dim i As Long

LastRow = Cells(Rows.Count, "C").End(xlUp).Row

For i = LastRow To 2 Step -1

    If Cells(i, 12).Value < Application.Evaluate("MAX(IF(" amp; Range(Cells(1, 23), Cells(LastRow, 23)).Address _
            amp; "=" amp; Cells(i, 23).Address amp; "," amp; Range(Cells(1, 12), Cells(LastRow, 12)).Address amp; "))") Then

        Rows(i).Delete

    End If

Next i

End Sub
  

Однако я заметил, что для некоторых записей идентификатор один и тот же, а также значение одинаковое. Это означает, что у меня осталось несколько дубликатов. Чтобы избавиться от них, я также хотел бы запустить тест для сравнения того, что находится в столбце Параметров. Каждая ячейка в этом столбце будет иметь один из следующих параметров: OptionA, OptionB, OptionC, упорядоченные по важности с уважением. Один из наиболее важных следует сохранить, а остальные удалить.

То, что я также пытаюсь сделать, это подсчитать и записать, сколько дубликатов из каждой группы было удалено. Допустим, есть 3 группы: GroupA, GroupB и groupC, я хотел бы иметь массив, и каждый раз, когда дубликат удаляется, код должен проверять, к какой группе он принадлежит, и добавлять ее к этому элементу массива. Знаете ли вы, как я могу изменить свой код для достижения этой цели?

Ответ №1:

вы можете объявить и инициализировать массив в верхней части вашего кода (ниже скажем Dim I as Long) следующим образом:

     Dim yourArray(3) As Long

    yourArray(1) = 0 'GroupA
    yourArray(2) = 0 'GroupB
    yourArray(3) = 0 'GroupC
  

Затем внутри вашего оператора IF непосредственно перед удалением строки добавьте что-то вроде этого:

 if(cells(i, 5).value = "GroupA") then yourArray(1) = yourArray(1)   1
if(cells(i, 5).value = "GroupB") then yourArray(2) = yourArray(2)   1
if(cells(i, 5).value = "GroupC") then yourArray(3) = yourArray(3)   1
  

Есть более аккуратные способы сделать это, но это позволит выполнить работу