我正在使用 VBA 在 Excel 中处理一个突出重复行的过程。该过程评估工作表函数 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