如何加粗突出重复行excel vba

时间:2012-10-25 10:50:22

标签: excel excel-vba vba

我有以下代码可以获取重复的行,但是我无法获取代码以突出显示粗体重复项以及同时删除它们。

Public Sub ProcessData()
Const TEST_COLUMN As String = "A" '<=== change to suit
Dim i As Long
Dim iLastRow As Long
Dim rng As Range

With ActiveSheet

    iLastRow = .Cells(.Rows.Count, TEST_COLUMN).End(xlUp).Row
    For i = 1 To iLastRow
        If .Evaluate("SUMPRODUCT(--(A" & i & ":A" & iLastRow & "=A" & i & ")," & _
    "--(D" & i & ":D" & iLastRow & "=D" & i & ")," & _
    "--(F" & i & ":F" & iLastRow & "=F" & i & ")," & _
    "--(J" & i & ":J" & iLastRow & "=J" & i & ")," & _
        "--(K" & i & ":K" & iLastRow & "=K" & i & "))") > 1 Then
            If rng Is Nothing Then
                Set rng = .Cells(i, "A").Resize(, 11)
            Else
                Set rng = Union(rng, .Cells(i, "A").Resize(, 11))
            End If
        End If
    Next i

    **If Not rng Is Nothing Then rng.Delete.font.bold = true**


End With

End Sub

数据集和所需输出的示例可在以下可下载链接中看到:

https://www.dropbox.com/s/7rhktg6b4nk6ig0/Bold_highlight_Duplicate%20.xlsm

非常感谢任何帮助。谢谢。

编辑:

澄清一下,它应该是这样的,只是输入应该被删除,粗体突出显示应该出现在输出部分:

enter image description here

1 个答案:

答案 0 :(得分:0)

而不是**If Not rng Is Nothing Then rng.Delete.font.bold = true**使用以下内容:

If Not rng Is Nothing Then
  with rng
   .Offset(.Areas(.Areas.Count).Rows(.Areas(.Areas.Count).Rows.Count).Row + 1).Font.Bold = True
   .Delete
  end with
End If

这是如何运作的?

嗯,您可以在测试重复项时设置粗体指示器,但是您采用了不同的方法,但不允许这样做。

因此,您的rng是一个多区域选择。

你必须到达最后一个区域,然后到达该区域的最后一行,然后检索你所在的实际行。然后为它们之间的空间添加+1。现在您知道输入部分覆盖了多少行+输出的间隙,并将您的选择偏移到输出部分。

然而,可能会出现并发症,依赖于您的输入/输出 - 我在您的示例中简要测试过 - 工作过。不过,我认为最好使用不同类型的循环和放大器。重复检测。