[英]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列单元格变成红色。 我问了一个与此类似的问题,但是从那时起,我正在使用的工作簿已经改变了很多,并且这个问题比上一个更简单。 如果有人可以提供帮助,我将非常感激。 谢谢!
您的代码有很多问题。
.Value
返回一个基本类型,例如字符串或long。 您不能将其分配给范围变量。 End If
和Next cell
语句将被交换。 始终使用正确的缩进,以使这些错误更加明显。 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.