0

我正在尝试在 excel 2003 上编写代码,以根据我在前一个单元格中手动输入的信息更改单元格的背景颜色。这是为了显示我们前 10 名客户的客户满意度分数。

我在下面编写了这段代码,但我只知道如何使它适用于一个单元格而不是一系列单元格。在使用它时,我是一个业余爱好者,因此我们将不胜感激。

Private Sub Worksheet_Change(ByVal Target As Range)

If Range("B1").Value < Range("A1").Value Then Range("B1").Interior.ColorIndex = 3
If Range("B1").Value = Range("A1").Value Then Range("B1").Interior.ColorIndex = 6
If Range("B1").Value > Range("A1").Value Then Range("B1").Interior.ColorIndex = 45
If Range("B1").Value = 1 Then Range("B1").Interior.ColorIndex = 4
End Sub

此代码适用于一个单元格,但我需要对电子表格不同区域中的一系列单元格执行此操作

我希望代码适用于单元格 F26 到 F35,以根据 C26 列到 C35 列中的信息更改颜色。由于这已经超过 12 个月,我想要代码将单元格 I26 的颜色更改为 I35,从 F26 中的信息更改为 F35,依此类推。

抱歉,如果这听起来像一个非常愚蠢的问题,但我是一个业余爱好者,只是在寻求对此有所了解的人的帮助

4

4 回答 4

1

好的,那么这里是详细的解决方案:

应该隐藏第 3 列,这只是使用 sign() 公式函数: =SIGN(B2-A2) 请注意,对于 sign=1 的情况,列的默认背景颜色是您希望看到的颜色

这就是工作表的样子

这些是您的条件格式规则。我只对单元格 B2 进行了此操作,然后为该列的其余部分填充了格式。一条规则用于符号 = 1,一条规则用于符号 =-1,一条规则用于 B2 = 1。

这些是你的 3 条规则

于 2012-08-03T13:30:01.723 回答
0
Private Sub Worksheet_Change(ByVal Target As Range)

Dim oCell           As Range

For Each oCell In Target
    Call Input_Ranges(oCell, Range("F26:F35"), -3)
    Call Input_Ranges(oCell, Range("I26:I35"), -3)
    Call Input_Ranges(oCell, Range("L26:L35"), -3)
    Call Input_Ranges(oCell, Range("O26:O35"), -13)
Next oCell

End Sub

Public Sub Input_Ranges(oCell As Range, oRange As Range, iOffset As Integer)

    If Not Intersect(oCell, oRange) Is Nothing Then
        If oCell < oCell.Offset(0, iOffset) Then
             oCell.Interior.ColorIndex = 3
         ElseIf oCell > oCell.Offset(0, iOffset) Then
             oCell.Interior.ColorIndex = 45
         ElseIf oCell = oCell.Offset(0, iOffset) Then
             oCell.Interior.ColorIndex = 6
         ElseIf oCell = 1 Then
             oCell.Interior.ColorIndex = 4
         End If
    End If

End Sub

我根据您的要求(评论)再次修改了代码。

小解释:
Target 是正在改变并触发事件的范围。
Intersect 方法检查目标是否在定义的范围内。
偏移量检查目标范围左侧已更改的第三列。
您可以将其更改为您喜欢的任何列。

于 2012-07-31T12:24:08.360 回答
0

你真的需要在Worksheet_Change活动中这样做吗?这会让事情变慢一点。

无论如何,没有办法为范围编写这样的代码,您必须逐个迭代范围内的单元格。例如像这样:

Dim r As Range
Dim ws As Worksheet
Set ws = ActiveSheet
For Each r In ws.Range("F26:F35")
    If r.Value < ws.Cells(r.Row, 3) Then r.Interior.ColorIndex = 3  '3 -- Column C
    '...
Next
于 2012-07-31T11:53:18.140 回答
0

我建议使用具有计算值(例如差异符号)的隐藏列,并为该列使用条件格式集,因为 Martin 是正确的,这会减慢您的 Excel 速度。

但是,如果您真的想在该事件处理程序上执行此操作,则该例程会收到一个参数,该参数是已修改的范围。您可以遍历其行或列。

于 2012-07-31T11:55:48.933 回答