重複行を強調表示する VBA を使用して、Excel で手順を実行しています。このプロシージャは、ワークシート関数 sumproduct の結果を評価して、行に重複があるかどうかを判断します。
評価された数式は、次のようになります。
SUMPRODUCT(--(A1:A10 = A1), --(B1:B10 = B1), --(C1:C10 = C1))
これまでのところ、手順はうまく機能していますが、非表示の行と列を評価から無視する必要があります。を使用してループ内の列の非表示の行をスキップできますがRange.Hidden = False
、SUMPRODUCT から非表示の行と列を除外する方法がわかりません。
また、2 つの入れ子になったループを使用してすべての行を 2 回繰り返し、一度に 2 行ずつ値を比較しようとしましたが、N 乗または O(n 2 ) の繰り返しになるため、その方法をあきらめました。
スプレッドシートの数式 SUBTOTAL で可能なように、非表示の行を無視するように SUMPRODUCT を強制する方法はありますか?
これが私がこれまでに使用したもの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