【问题标题】:Conditional Formatting in VBAVBA 中的条件格式
【发布时间】:2016-03-17 05:57:44
【问题描述】:

我想通过让重复的单元格变为红色来管理 Excel 工作表上的重复项。我将此用于工作表保护,以防止编辑这些列的条件格式。但是,当我移动单元格信息(通过单击和拖动)时,条件格式也会从该单元格中移动。归根结底,我没有对我想要的每个单元进行重复覆盖。当我移动单元格时,有什么方法可以防止这种情况发生,或者我可以放入什么宏来处理这个问题?

我想用 VBA 做这样的事情:

Sub Duplicate()
Dim rngData As Range
Dim cell As Range

Set rngData = Range("P3:P19, P56:P58, P39:P42, P21:P25, P27:P37, P39:P42, P39:P42, P44:P54, M25:M76, B69:B77, B66:E67, B51:B64, H44:H47, D44:D47, H42, H33:H40, D33:D42, H31, D28:D31, H28:H29, D5:D8" & Cells(Rows.Count, "B").End(xlUp).Row)
For Each cell In rngData
cell.Offset(0, 0).Font.Color = vbBlack          ' DEFAULT COLOR
' LOCATE DUPLICATE VALUE(S) IN THE SPECIFIED RANGE OF DATA.
        If Application.Evaluate("COUNTIF(" & rngData.Address & "," & cell.Address & ")") > 1 Then
            cell.Offset(0, 0).Font.Color = vbRed        ' CHANGE FONT COLOR TO RED.
        End If
    Next cell

    Set rngData = Nothing

    Application.ScreenUpdating = True
End Sub

但我在以下位置收到“类型不匹配”错误: If Application.Evaluate("COUNTIF(" & rngData.Address & "," & cell.Address & ")") > 1 那么

我怎样才能解决这个问题?

【问题讨论】:

  • 问题是您不能在 Countif() 中使用脱节的范围。因此,您需要将 rngdata 部分设置为范围,如本例中的B3:P81
  • 该区域中还有一些其他项目是重复的,我不想突出显示......我还能如何解决这个问题?
  • 可以设置双循环通过数据检测是否相等,不使用countif。

标签: excel vba


【解决方案1】:

根据评论,您需要循环两次:

Sub Duplicate()
Dim rngData As Range
Dim cell As Range
Dim cell2 As Range

Set rngData = Range("P3:P19, P56:P58, P39:P42, P21:P25, P27:P37, P39:P42, P39:P42, P44:P54, M25:M76, B69:B77, B66:E67, B51:B64, H44:H47, D44:D47, H42, H33:H40, D33:D42, H31, D28:D31, H28:H29, D5:D8" & Cells(Rows.Count, "B").End(xlUp).Row)

rngData.Font.Color = vbBlack

For Each cell In rngData
    If cell.Font.Color = vbBlack Then
        For Each cell2 In rngData
            If cell = cell2 And cell.Address <> cell2.Address Then
                cell.Font.Color = vbRed
                cell2.Font.Color = vbRed
            End If
        Next
    End If
Next


Set rngData = Nothing

Application.ScreenUpdating = True
End Sub

【讨论】:

  • 这是将范围内的每个单元格设置为具有红色字体颜色,将其从黑色更改。它不检查重复项。
  • @Kish 查看编辑,我在查找重复项时忘记排除自身。
  • 有效!有一个小问题。当我在范围内输入新单元格时,即使没有,它也会自动变为红色,除非我再次运行宏然后它会自行更正。我希望它在第一个实例中保持黑色,仅在重复时才显示为红色——在运行宏之后
  • 这是一个不同的问题,但快速的答案是从工作表更改事件中调用这个子。
  • 好的,我会单独发布,因为我需要代码方面的帮助。
猜你喜欢
  • 2015-02-28
  • 2020-03-16
  • 2011-10-02
  • 1970-01-01
  • 2017-03-05
  • 1970-01-01
  • 2017-11-03
  • 2014-12-27
  • 1970-01-01
相关资源
最近更新 更多