Я работаю над процедурой в Excel с использованием VBA, которая выделяет повторяющиеся строки. Процедура оценивает результат функции sumproduct функции листа, чтобы определить, есть ли в строке дубликаты.
Полученная формула в итоге выглядит так:
SUMPRODUCT(--(A1:A10 = A1), --(B1:B10 = B1), --(C1:C10 = C1))
Пока процедура работает отлично, но мне нужно, чтобы она игнорировала скрытые строки и столбцы из оценки. Я могу пропустить скрытые строки в столбцах в своих циклах, используя Range.Hidden = False
, но я не нашел способа исключить скрытые строки и столбцы из SUMPRODUCT.
Я также пытался выполнить итерацию по каждой строке дважды, используя два вложенных цикла и просто сравнивая значения по две строки за раз, но это привело к N-квадратам или O (n 2 ) итерациям, поэтому отказался от этого метода.
Есть ли способ заставить SUMPRODUCT игнорировать скрытые строки, как это возможно с формулой электронной таблицы SUBTOTAL?
Вот то, что я пока использую 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