【问题标题】:Compare values from a range (e.g. column D) with values in a range beside (e.g. column C)将范围内的值(例如 D 列)与旁边范围内的值(例如 C 列)进行比较
【发布时间】:2022-12-16 05:28:47
【问题描述】:

我正在尝试将范围内的值(例如 D 列)与旁边范围内的值(例如 C 列)进行比较,它以红色突出显示具有不同值的列,然后向右移动以比较下一个值范围在(即 E 列)和 D 列旁边,依此类推,直到出现空白的列范围。

这些是我的代码。应用程序定义的错误。

Sub Macro1()
'
' Macro1 Macro
'

'
    Range(ActiveCell, ActiveCell.End(xlDown)).Select
    Do Until IsEmpty(ActiveCell.Offset(, 1))
        Selection.FormatConditions.Add Type:=xlExpression, Formulal:=ActiveCell.Select <> ActiveCell.Offset(0, -1).Value
        Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority
        With Selection.FormatConditions(1).Interior
        .PatternColorIndex = xlAutomatic
        .Color = 255
        .TintAndShade = 0

    End With
    Loop
    ActiveCell.Offset(0, 1).Select
End Sub

【问题讨论】:

  • 这段代码看起来不像是直接从 VBA 编辑器复制的。您能否编辑您的问题并粘贴实际代码?
  • @FunThomas 抱歉,第一次来这里的用户。代码现在看起来还好吗?

标签: excel vba


【解决方案1】:

试试这个 - 您需要为 CF 规则构建一个公式,使用要比较的两个范围中第一个单元格的 Address() 属性。当您应用规则时,公式将针对每一行进行调整,因此无需逐个单元格。

Sub Macro1()
    Dim rngCF As Range, addr1, addr2, cf As FormatCondition
    
    Set rngCF = Range(ActiveCell, ActiveCell.End(xlDown))
    addr1 = rngCF.Cells(1).Address(False, False)
    addr2 = rngCF.Offset(0, -1).Cells(1).Address(False, False) 'one column to left
    
    Set cf = rngCF.FormatConditions.Add(Type:=xlExpression, _
                        Formula1:="=" & addr1 & "<>" & addr2)
    With cf
        .SetFirstPriority
        With .Interior
            .PatternColorIndex = xlAutomatic
            .Color = 255
            .TintAndShade = 0
        End With
    End With
End Sub

【讨论】:

  • 哇,你太棒了!它的工作谢谢!您能否与我分享 addr1 和 addr2 的作用以及这对条件格式公式有何影响?
  • addr1 和 2 只是被比较的两个单元格的单元格地址。因此,如果 rngCf 是 B2:B10,则用于 CF 规则的公式是 =B2&lt;&gt;A2 。调用 Address() 时使用显示的参数,否则您将获得绝对地址:如果您使用(例如)=$B$2&lt;&gt;$A$2 作为 CF 公式,它不会自动调整范围内的其他单元格。
猜你喜欢
  • 1970-01-01
  • 2020-04-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-11-18
  • 2018-08-25
相关资源
最近更新 更多