Vba 自动高亮显示具有各种颜色的重复值

Vba 自动高亮显示具有各种颜色的重复值,vba,excel,conditional-formatting,Vba,Excel,Conditional Formatting,我有这些电子表格文件供逾期付款者使用(通常每月20多个)。我想做的是能够自动格式化不同颜色的重复值。以下是我使用的VBA代码(来自其他站点): 这是一个示例文件: 我遇到的问题是: 我的范围是A2:L50,但它用红色表示空白单元格(虽然我已经用条件格式化值固定了它)() 当我进行更改时,它不会自动运行VBA或使格式重复单元格,每次更改后我都必须手动运行模块 我不能给每个人分配颜色,因为我们有100多人在为我们租房 不管怎样,我希望有人能帮我解决这个问题。提前谢谢 能否在助手列B中执行以下操

我有这些电子表格文件供逾期付款者使用(通常每月20多个)。我想做的是能够自动格式化不同颜色的重复值。以下是我使用的VBA代码(来自其他站点):

这是一个示例文件:

我遇到的问题是:

  • 我的范围是A2:L50,但它用红色表示空白单元格(虽然我已经用条件格式化值固定了它)(
  • 当我进行更改时,它不会自动运行VBA或使格式重复单元格,每次更改后我都必须手动运行模块
  • 我不能给每个人分配颜色,因为我们有100多人在为我们租房

不管怎样,我希望有人能帮我解决这个问题。提前谢谢

能否在助手列B中执行以下操作,然后在该列上使用条件格式>颜色比例

要向下拖动的公式(根据需要修改范围)

数据布局:


能否在助手列B中执行以下操作,然后在该列上使用条件格式>颜色比例

要向下拖动的公式(根据需要修改范围)

数据布局:


回答您的3个问题

  • 要不给空单元格着色,只需使用
    测试空单元格,如果是xCell.Value vbNullString,则使用
    (请参阅下面的代码)

  • 另一个问题是,只有一个问题。你从color index=2开始(省去黑色和白色),所以实际上剩下54种颜色。如果有超过54个的副本,它们的颜色不能不同,您需要开始重新使用以前使用过的颜色

    If xCIndex > 56 Then xCIndex = 2  '(see code below)
    
    所以颜色不再是独一无二的了

    但你应该大体考虑一下。因为使用超过10或15种颜色并不能使工作表更清晰。如果有超过10种颜色,我看不出不同颜色有任何好处

  • 在任何单元格更改上自动运行该代码都会使工作簿的响应速度慢得令人难以置信(如果其中有多个数据行)。因此,我建议只手动运行(使用按钮或快捷方式)。
    但是您可以尝试在
    工作表\u Change
    事件中运行它。但我觉得那太慢了

    Option Explicit
    
    Private Sub Worksheet_Change(ByVal Target As Range)
        ColorCompanyDuplicates
    End Sub
    
    如果自动运行,可能需要删除对话框并在重新着色之前删除着色:

    Set xRg = Range(xTxt) 'replace the original "Set xRg" line
    If xRg Is Nothing Then Exit Sub
    xRg.Interior.ColorIndex = xlNone 'remove old coloring
    

  • 这是从1和2更改的代码部分:

        If xCell.Value <> vbNullString Then 'skip coloring empty cells
    
            xCol.Add xCell, xCell.Text
            If Err.Number = 457 Then
                xCIndex = xCIndex + 1
                If xCIndex > 56 Then xCIndex = 2 'start re-using colors
                Set xCellPre = xCol(xCell.Text)
                If xCellPre.Interior.ColorIndex = xlNone Then xCellPre.Interior.ColorIndex = xCIndex
                xCell.Interior.ColorIndex = xCellPre.Interior.ColorIndex
            ElseIf Err.Number = 9 Then
                MsgBox "Too many duplicate companies!", vbCritical, "Kutools for Excel"
                Exit Sub
            End If
    
        End If
    
    如果是xCell.Value vbNullString,则“跳过为空单元格着色”
    添加xCell,xCell.Text
    如果错误编号=457,则
    xindex=xindex+1
    如果xindex>56,则xindex=2'开始重新使用颜色
    设置xCellPre=xCol(xCell.Text)
    如果xCellPre.Interior.ColorIndex=xlNone,则xCellPre.Interior.ColorIndex=xcdex
    xCell.Interior.ColorIndex=xCellPre.Interior.ColorIndex
    ElseIf Err.Number=9,则
    MsgBox“重复公司太多!”,vbCritical,“Kutools for Excel”
    出口接头
    如果结束
    如果结束
    
    回答您的3个问题

  • 要不给空单元格着色,只需使用
    测试空单元格,如果是xCell.Value vbNullString,则使用
    (请参阅下面的代码)

  • 另一个问题是,只有一个问题。你从color index=2开始(省去黑色和白色),所以实际上剩下54种颜色。如果有超过54个的副本,它们的颜色不能不同,您需要开始重新使用以前使用过的颜色

    If xCIndex > 56 Then xCIndex = 2  '(see code below)
    
    所以颜色不再是独一无二的了

    但你应该大体考虑一下。因为使用超过10或15种颜色并不能使工作表更清晰。如果有超过10种颜色,我看不出不同颜色有任何好处

  • 在任何单元格更改上自动运行该代码都会使工作簿的响应速度慢得令人难以置信(如果其中有多个数据行)。因此,我建议只手动运行(使用按钮或快捷方式)。
    但是您可以尝试在
    工作表\u Change
    事件中运行它。但我觉得那太慢了

    Option Explicit
    
    Private Sub Worksheet_Change(ByVal Target As Range)
        ColorCompanyDuplicates
    End Sub
    
    如果自动运行,可能需要删除对话框并在重新着色之前删除着色:

    Set xRg = Range(xTxt) 'replace the original "Set xRg" line
    If xRg Is Nothing Then Exit Sub
    xRg.Interior.ColorIndex = xlNone 'remove old coloring
    

  • 这是从1和2更改的代码部分:

        If xCell.Value <> vbNullString Then 'skip coloring empty cells
    
            xCol.Add xCell, xCell.Text
            If Err.Number = 457 Then
                xCIndex = xCIndex + 1
                If xCIndex > 56 Then xCIndex = 2 'start re-using colors
                Set xCellPre = xCol(xCell.Text)
                If xCellPre.Interior.ColorIndex = xlNone Then xCellPre.Interior.ColorIndex = xCIndex
                xCell.Interior.ColorIndex = xCellPre.Interior.ColorIndex
            ElseIf Err.Number = 9 Then
                MsgBox "Too many duplicate companies!", vbCritical, "Kutools for Excel"
                Exit Sub
            End If
    
        End If
    
    如果是xCell.Value vbNullString,则“跳过为空单元格着色”
    添加xCell,xCell.Text
    如果错误编号=457,则
    xindex=xindex+1
    如果xindex>56,则xindex=2'开始重新使用颜色
    设置xCellPre=xCol(xCell.Text)
    如果xCellPre.Interior.ColorIndex=xlNone,则xCellPre.Interior.ColorIndex=xcdex
    xCell.Interior.ColorIndex=xCellPre.Interior.ColorIndex
    ElseIf Err.Number=9,则
    MsgBox“重复公司太多!”,vbCritical,“Kutools for Excel”
    出口接头
    如果结束
    如果结束
    
    请验证我是否正确格式化了您的代码。在打开下一个新的On Error Resume之前,顶部还有一个On Error(开启错误)未关闭。不确定是否需要第二个,但第一个需要关闭。我试过了,它不起作用。您好,您是说格式已经更改了一些内容(我希望不应该更改,但我可以回滚更改),还是说更改错误部分意味着已停止工作?我只更改了代码的间距和缩进。我没有添加或修改任何功能。使用VBA有什么原因吗?为什么不立即自动使用?请验证我是否已正确格式化了您的代码。在打开下一个新的On Error Resume之前,顶部还有一个On Error未关闭的On Error。不确定是否需要第二个,但第一个需要关闭。我试过了,它不起作用。您好,您是说格式已经改变了一些东西(它不应该有…我希望。但我可以回滚)