#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
Есть более аккуратные способы сделать это, но это позволит выполнить работу