通过VBA宏突出显示excel中的重复行

新台币

我有一个矩阵,在第一列中包含不同/相同的值,在第一行中包含不同的值。

我想比较所有行并突出显示重复的行。对于每一行,应检查“ +”,“-”和“ /”值的组合,并应以不同的颜色突出显示重复的行对(三重等)(每个重复对的颜色不同)。

还应假定如下所示的三行是重复的。它将接受“ /”值作为“ +”和“-”,并且还将突出显示这些行作为重复行。

这是我想要的宏结果的一个示例(相同颜色的行是重复的); 在此处输入图片说明

编辑: x4和x7也是x1和x2的重复项。还有其他未着色的重复项。我只是对一些重复项进行了上色,以解释我的问题。

罗恩·罗森菲尔德

我将重新陈述您的匹配规则,如下所示(希望我是正确的):

  • + 匹配班上的任何东西 [+/]
  • - 匹配班上的任何东西 [-/]
  • / 匹配班上的任何东西 [-+/]

在这种情况下,就需要根据字符串连接创建一个模式,该模式将充当匹配模式。可以使用正则表达式完成此操作,但是VBA具有Like方法,该方法同样可以工作,也许更快。

我们首先通过插入一个Class模块并将其重命名为cRowString来进行设置

类模块

Option Explicit
Private pRow As Long
Private pColA As String
Private pConcatString As String
Private pPattern As String

Public Property Get Row() As Long
    Row = pRow
End Property
Public Property Let Row(Value As Long)
    pRow = Value
End Property

Public Property Get ColA() As String
    ColA = pColA
End Property
Public Property Let ColA(Value As String)
    pColA = Value
End Property

Public Property Get ConcatString() As String
    ConcatString = pConcatString
End Property
Public Property Let ConcatString(Value As String)
    pConcatString = Value
End Property

Public Property Get Pattern() As String
    Pattern = pPattern
End Property
Public Property Let Pattern(Value As String)
    pPattern = Value
End Property

接下来输入此常规模块

Option Explicit
Sub HilightDuplicateRows()
    Dim vData As Variant, lColors() As Long, V As Variant
    Dim colDups As Collection
    Dim R As Range
    Dim cR As cRowString, colRows As Collection
    Dim arrColors
    Dim S1 As String, S2 As String
    Dim I As Long, J As Long, K1 As Long, K2 As Long, L As Long

arrColors = VBA.Array(vbRed, vbCyan, vbYellow, vbGreen)

'get original range and load data into array
Set R = Range("a1", Cells(Rows.Count, "A").End(xlUp))
I = Cells(1, Columns.Count).End(xlToLeft).Column
Set R = R.Resize(columnsize:=I)

vData = R

'Iterate through and create patterns, collect them
Set colRows = New Collection
For I = 2 To UBound(vData, 1)
    S1 = ""
    S2 = ""
    For J = 2 To UBound(vData, 2)
        S1 = S1 & vData(I, J)
        Select Case vData(I, J)
            Case "+"
                S2 = S2 & "[+/]"
            Case "-"
                S2 = S2 & "[-/]"
            Case "/"
                S2 = S2 & "[-+/]"
        End Select
    Next J
    Set cR = New cRowString
    With cR
        .Row = I
        .ColA = vData(I, 1)
        .ConcatString = S1
        .Pattern = S2
    End With
    colRows.Add cR
Next I

'Check for duplicate pairs
Set colDups = New Collection
For I = 1 To colRows.Count - 1
    For J = I + 1 To colRows.Count
        If colRows(I).ConcatString Like colRows(J).Pattern Then
            colDups.Add CStr(colRows(I).Row & "," & colRows(J).Row)
        End If
    Next J
Next I

'Color the rows
ReDim lColors(1 To UBound(vData, 1))
J = 0
For I = 1 To colDups.Count
    V = Split(colDups(I), ",")
    If IsArray(V) Then
        Select Case lColors(V(0))
            Case 0
                J = J + 1
                K1 = J Mod (UBound(arrColors) + 1)
                lColors(V(0)) = arrColors(K1)
                lColors(V(1)) = arrColors(K1)
            Case Else
                lColors(V(1)) = lColors(V(0))
        End Select
    Else
        lColors(V) = xlAutomatic
    End If
Next I

R.Interior.Color = xlAutomatic
For I = 1 To R.Rows.Count
If lColors(I) = 0 Then
    R.Rows(I).Interior.Color = xlAutomatic
Else
    R.Rows(I).Interior.Color = lColors(I)
End If
Next I

End Sub

选择活动工作表并运行宏

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Excel VBA在活动列中突出显示重复项

来自分类Dev

通过 VBA 在 Excel 数据透视表中显示具有重复数量的重复行

来自分类Dev

删除/突出显示Excel中跨多列的重复行

来自分类Dev

Excel-突出显示并删除行中重复的列值

来自分类Dev

在Excel 2010中,使用宏和VBA比较列中的数据并突出显示值(如果不同)

来自分类Dev

在Excel中查找并突出显示重复的条目

来自分类Dev

突出显示数据行的宏未在Excel工作簿中运行

来自分类Dev

突出显示具有重复金额的重复客户。在Excel中

来自分类Dev

突出显示具有重复金额的重复客户。在Excel中

来自分类Dev

如何在Excel 2013中突出显示包含重复值的行?

来自分类Dev

Excel-当值不相邻时如何在其自己的行中突出显示重复的值

来自分类Dev

仅当存在4个或更多实例时,才如何删除(或突出显示)Excel中的重复行?

来自分类Dev

突出显示Excel文档中的行

来自分类Dev

突出显示重复值并从 Excel 中的列表中绘制

来自分类Dev

突出显示VBA中重复项之间的差异

来自分类Dev

如何使用Excel VBA突出显示表的整个行

来自分类Dev

比较一行中的两组单元格并在Excel中突出显示相同行的重复项

来自分类Dev

如何使用宏 vba 从特定列中删除重复的行

来自分类Dev

Excel宏突出显示每个空行上方的每一行

来自分类Dev

通过比较删除excel中重复的行对

来自分类Dev

简单重复Excel中的宏

来自分类Dev

VBA宏突出显示当前电子邮件中的选定文本

来自分类Dev

VBA宏通过行中的列循环并比较值

来自分类Dev

在Excel中突出显示具有相同数据的行

来自分类Dev

在 MS Excel 中,尝试突出显示多个条件的行

来自分类Dev

用googlespreadsheet突出显示重复行

来自分类Dev

pandas - 突出显示重复数据行

来自分类Dev

通过R和VBA在Excel中插入函数/公式,并通过R应用VBA宏

来自分类Dev

Excel 条件格式:当多于一行匹配时突出显示重复项

Related 相关文章

  1. 1

    Excel VBA在活动列中突出显示重复项

  2. 2

    通过 VBA 在 Excel 数据透视表中显示具有重复数量的重复行

  3. 3

    删除/突出显示Excel中跨多列的重复行

  4. 4

    Excel-突出显示并删除行中重复的列值

  5. 5

    在Excel 2010中,使用宏和VBA比较列中的数据并突出显示值(如果不同)

  6. 6

    在Excel中查找并突出显示重复的条目

  7. 7

    突出显示数据行的宏未在Excel工作簿中运行

  8. 8

    突出显示具有重复金额的重复客户。在Excel中

  9. 9

    突出显示具有重复金额的重复客户。在Excel中

  10. 10

    如何在Excel 2013中突出显示包含重复值的行?

  11. 11

    Excel-当值不相邻时如何在其自己的行中突出显示重复的值

  12. 12

    仅当存在4个或更多实例时,才如何删除(或突出显示)Excel中的重复行?

  13. 13

    突出显示Excel文档中的行

  14. 14

    突出显示重复值并从 Excel 中的列表中绘制

  15. 15

    突出显示VBA中重复项之间的差异

  16. 16

    如何使用Excel VBA突出显示表的整个行

  17. 17

    比较一行中的两组单元格并在Excel中突出显示相同行的重复项

  18. 18

    如何使用宏 vba 从特定列中删除重复的行

  19. 19

    Excel宏突出显示每个空行上方的每一行

  20. 20

    通过比较删除excel中重复的行对

  21. 21

    简单重复Excel中的宏

  22. 22

    VBA宏突出显示当前电子邮件中的选定文本

  23. 23

    VBA宏通过行中的列循环并比较值

  24. 24

    在Excel中突出显示具有相同数据的行

  25. 25

    在 MS Excel 中,尝试突出显示多个条件的行

  26. 26

    用googlespreadsheet突出显示重复行

  27. 27

    pandas - 突出显示重复数据行

  28. 28

    通过R和VBA在Excel中插入函数/公式,并通过R应用VBA宏

  29. 29

    Excel 条件格式:当多于一行匹配时突出显示重复项

热门标签

归档