【问题标题】:Excel VBA Changing Cell ColorExcel VBA 更改单元格颜色
【发布时间】:2018-12-17 19:21:06
【问题描述】:

我正在尝试获取 U 列中不等于 2.04 或 3.59 的所有单元格来更改单元格颜色。

代码如下:

Private Sub Cell_Color_Change()

For Each cell In Range("U2:U19004")
    If cell.Value <> 2.04 Or 3.59 Then cell.Interior.ColorIndex = 3
    Next cell

End Sub

由于某些原因,该代码将整列变为红色。 我试过使用条件格式,同样的事情发生了。 请帮忙。谢谢!

【问题讨论】:

  • 您使用了错误的逻辑运算符。如果您希望等于 2.04 或 3.59 的单元格更改颜色,您应该使用 = 运算符。此外,您需要比较它两次,即cell.value = 2.04 or cell.value = 3.59
  • 我很抱歉布罗塔托。我的意思是说不等于。我的错。谢谢!
  • 我已经有一段时间没有使用VBA了,但请尝试If cell.Value &lt;&gt; 2.04 Or cell.Value &lt;&gt; 3.59 Then cell.Interior.ColorIndex = 3
  • 我相信通过在第二部分不添加运算符,VBA会将数字视为真实,因为0以外的任何东西都是真实的,它总是会发生
  • 我会避免使用 Color.Index,因为使用可以改变主题,然后你的颜色可以改变。所以在一个主题下,Color.Index(1) 可能是橙色,但在另一个主题下,它可能是蓝色。我建议在设置颜色时始终使用 RGB 值。

标签: excel vba ms-office


【解决方案1】:

更正您的ANDOR

Private Sub Cell_Color_Change()
    For Each cell In Range("U2:U19004")
        If cell.Value <> 2.04 And cell.Value <> 3.59 Then cell.Interior.ColorIndex = 3
    Next cell
End Sub

编辑#1:

要查找四舍五入到两位小数的值,请尝试以下替代方法:

Private Sub Cell_Color_Change()

    Dim cv As Variant

    For Each cell In Range("U2:U19004")
        cv = Application.WorksheetFunction.Round(cell.Value, 2)
        If cv <> 2.04 And cv <> 3.59 Then cell.Interior.ColorIndex = 3
    Next cell
End Sub

【讨论】:

  • 你是怎么做到的?我最初有相同的代码。但它仍然突出了整个专栏。我究竟做错了什么?谢谢!
  • @CiaraMo 您可能是舍入错误的受害者............ U 列中的值可能不是 完全符合您的标准! (特别是如果它们来自公式)
  • 它们确实来自一个公式。这是一个 sum() 函数。那我该怎么解决呢?
  • 我修好了!我将所有浮点数锁定到小数点后 2 位。现在它就像一个魅力!非常感谢! @Gary 的学生 :)
  • @CiaraMo 查看我的EDIT#1
【解决方案2】:
  1. 条件格式会这样做:
    一种。使用公式:AND(U2&lt;&gt;2.04,U2&lt;&gt;3.59)
    湾。选择填充颜色
    C。将其应用于U2:U19004

  2. 但如果你想对其进行编码,if 应该是:

    If cell.Value &lt;&gt; 2.04 AND cell.Value &lt;&gt; 3.59 Then cell.Interior.ColorIndex = 3

【讨论】:

    【解决方案3】:

    使用 VBA 设置条件格式。

    Option Explicit
    
    Private Sub set_Cell_Color_Change()
    
        With Range("U2:U19004")
            .FormatConditions.Delete
            .FormatConditions.Add Type:=xlExpression, Formula1:="=and(round($u2, 2)<>2.04, round($u2, 2)<>3.59)"
            .FormatConditions(.FormatConditions.Count).Font.Color = vbRed
        End With
    
    End Sub
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-06-04
      • 2017-09-17
      • 2013-10-19
      • 2013-03-09
      • 1970-01-01
      • 2018-10-17
      • 2021-10-31
      相关资源
      最近更新 更多