繁体   English   中英

根据其他单元格值更改单元格颜色

[英]Change cell color based on another cell value

在我拥有的工作簿中,D列中包含一个公式,以得出C列中值的最后六位。这些列位于标题为“ JE”的工作表中。 我有一个动态SQL连接的查询,该查询的A列中有值。 该查询位于标题为“ required_refs”的工作表中。 我本质上是想写:如果D列单元格中的值与表“ required_refs”中该查询中的任何值匹配/等于,则将表JE中的F列单元格设为红色。

示例:如果单元格D10的值等于“ required_refs”中A列中的任何值,则将单元格F10设为红色。 此外,如果单元格D13的值与工作表“ required_refs”中的A列中的值匹配/相等,则将F13变为红色。 等等。

这是我尝试的代码。 我将其添加到工作表“ JE”中:代码:

  Sub ChangeCellColor()

    Dim ref_code As Range: Set ref_code = Range("D7:D446").Value
    Dim refCode_Confirm As Range: Set refCode_Confirm = Worksheets("required_refs").Range("A:A").Value
    Dim colorChange As Range: Set colorChange = Worksheets("required_refs").Range("A:A")

    For Each cell In ref_code
        If cell.Value = refCode_Confirm.Value Then
            Range("F7:F446").ActiveCell.Interior.ColorIndex = 3
            Next cell
        End If
    End Sub

目前,此代码什么都不做。 它不会使F列单元格变成红色。 我问了一个与此类似的问题,但是从那时起,我正在使用的工作簿已经改变了很多,并且这个问题比上一个更简单。 如果有人可以提供帮助,我将非常感激。 谢谢!

您的代码有很多问题。

  1. .Value返回一个基本类型,例如字符串或long。 您不能将其分配给范围变量。
  2. 您的End IfNext cell语句将被交换。 始终使用正确的缩进,以使这些错误更加明显。
  3. 您有一个未声明的可变cell 这可能会导致错误。 在VBE中,打开“ Tools > Options > Editor > Required Variable Declaration选项,以强制在新模块中使用“ Option Explicit

解决这些问题可导致我们这样做:

Sub ChangeCellColor()

  Dim cell As Range
  Dim ref_code As Range: Set ref_code = Range("D7:D446")
  Dim refCode_Confirm As Range: Set refCode_Confirm = Worksheets("required_refs").Range("A:A")
  Dim colorChange As Range: Set colorChange = Worksheets("required_refs").Range("A:A")

  For Each cell In ref_code
    If cell.Value = refCode_Confirm.Value Then
      Range("F7:F446").ActiveCell.Interior.ColorIndex = 3
    End If
  Next cell

End Sub

不幸的是,由于您无法直接将单个值与VBA中的一列值进行比较,因此它仍然不起作用。

下面的代码纠正了这个剩余的问题。 请注意,选择合适的有意义的名称以及对变量使用RVBA 这是避免产生类似错误的好技巧。 另请注意,使用.Value2代替.Value 强烈建议这样做。

Sub ChangeCellColor()

  Dim rngRef As Range
  Dim rngRefsToCheck As Range: Set rngRefsToCheck = Range("D7:D446")
  Dim rngRequiredRefs As Range: Set rngRequiredRefs = Worksheets("required_refs").Columns("A")
  Dim rngColorChangeRequired As Range: Set rngColorChangeRequired = Columns("F")

  For Each rngRef In rngRefsToCheck
    If Not IsError(Application.Match(rngRef.Value2, rngRequiredRefs, 0)) Then
      rngColorChangeRequired.Cells(rngRef.Row).Interior.ColorIndex = 3
    End If
  Next rngRef

End Sub

实现颜色变化的最好,最快的方法是使用“高级滤镜”,从而避免了循环。 但是,由于您仍在学习基础知识,因此我们展示了循环版本。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM