Я работаю над процедурой в Excel, используя VBA, которая выделяет повторяющиеся строки. Процедура оценивает результат функции sumproduct рабочего листа, чтобы определить, есть ли в строке дубликаты.
Вычисленная формула в конечном итоге выглядит следующим образом:
SUMPRODUCT(--(A1:A10 = A1), --(B1:B10 = B1), --(C1:C10 = C1))
Пока процедура работает отлично, но мне нужно, чтобы она не учитывала скрытые строки и столбцы при оценке. Я могу пропустить скрытые строки в столбцах в своих циклах, используя Range.Hidden = False
, но я не нашел способа исключить скрытые строки и столбцы из СУММПРОИЗВ.
Я также пробовал перебирать каждую строку дважды, используя два вложенных цикла и просто сравнивая значения по две строки за раз, но это приводило к N-квадрату, или O(n2), итерациям, поэтому я отказался на том методе.
Есть ли способ заставить СУММПРОИЗВ игнорировать скрытые строки, как это возможно с формулой электронной таблицы ПРОМЕЖУТОЧНЫЙ ИТОГ?
Вот что у меня есть до сих пор, используя Evaluate(SUMPRODUCT)
: Спасибо!
Private Sub ShowDuplicateRows()
Dim lngRow As Long
Dim lngColumn As Long
Dim strFormula As String
With Selection
For lngRow = 1 To .Rows.Count
If Not .Rows(lngRow).Hidden Then
strFormula = "SUMPRODUCT("
For lngColumn = 1 To .Columns.Count
If Not .Columns(lngColumn).Hidden Then
If strFormula <> "SUMPRODUCT(" Then
strFormula = strFormula & ", "
End If
strFormula = strFormula _
& "--(" & .Columns(lngColumn).Address _
& " = " & .Cells(lngRow, lngColumn).Address & ")"
End If
Next
strFormula = strFormula & ")"
If Evaluate(strFormula) > 1 Then
.Rows(lngRow).Font.Color = RGB(255, 0, 0)
End If
End If
Next lngRow
End With
End Sub