首页 > 解决方案 > 这个 VBA 重复标记会更好吗?

问题描述

编写此 VBA 脚本只是为了扫描电子表格并通过填充其背景框来格式化重复项。只是好奇这段代码是否可以更有效。我一直在将此脚本用于多个 excel 文件,其中一些更改略有不同(因此未使用 colNum)。

我尝试过使用 Range,但在移动它并将其与以前的单元格进行比较时遇到了一些困难。

Private Sub MarkDupes()

Worksheets("Test").Activate

Dim rowNum As Long, colNum As Long, rowBelow As Long

'Following loop searches the predetermined column for values
For rowNum = 2 To 1206
   rowBelow = rowNum + 1
   If Cells(rowNum, 1) = Cells(rowBelow, 1) Then
      '38 = salmon
      Cells(rowNum, 1).Interior.ColorIndex = 38
      Cells(rowBelow, 1).Interior.ColorIndex = 38
   End If
Next rowNum
MsgBox "All Done"
End Sub

标签: excelvba

解决方案


这应该更有效:

Sub Tester()
    MarkDupes ActiveSheet.Range("A2:A14")
End Sub



Private Sub MarkDupes(rng As Range)

    Const SHADE As Long = 38
    Dim rowNum As Long, cv, n As Long, v, rStart As Long, arr

    arr = rng.Value
    cv = Chr(0) 'a non-value
    For rowNum = 1 To UBound(arr, 1)
        v = arr(rowNum, 1)
        If v <> cv Then
            If n > 1 Then rng.Cells(rStart).Resize(n, 1).Interior.ColorIndex = SHADE
            rStart = rowNum
            n = 1
            cv = v
        Else
            n = n + 1
        End If
    Next rowNum

    If n > 1 Then rng.Cells(rStart).Resize(n, 1).Interior.ColorIndex = SHADE

End Sub

根据您要如何处理空白(即空是否为“值”),需要进行一些修改


推荐阅读