Excel 条件格式:根据不同单元格的现有填充颜色使用填充颜色

Excel 条件格式:根据不同单元格的现有填充颜色使用填充颜色

下表代表我在 Microsoft Excel 中使用值。

+---+----+-----+---------+-----+
|   | A  |  B  |    C    |  D  |
+---+----+-----+---------+-----+
| 1 |    | Min | Current | Max |
| 2 | LF | 8   | 13      | 20  |
+---+----+-----+---------+-----+

我希望当前列中的值根据与最小和最大可能值相比是低、中还是高来改变颜色。
首先我要确定最大值和最小值之间的差值;在本例中为 d3 – a3 = 12。

从那里开始,第一个 1/3,或者值 12 的 33%,是“低”范围。

我能够使用 Excel 的“条件格式”,并在“新规则”→“使用公式确定要格式化的单元格”下生成以下公式:
第一条规则针对“低值”,其单元格将填充某种颜色;它们的范围从 8 到 12:

=$C2<ROUNDUP(($D2-$B2)*0.33, 0)+$B2

第二条添加的“高值”规则,范围从 17 到 20:

=$C2>$D2-ROUNDUP(($D2-$B2)*0.33, 0)

添加的第三个是“中等值”,既不属于高值也不属于中等值:

=OR($C2>=ROUNDUP(($D2-$B2)*0.33, 0)+$B2, $C2<=$D2-ROUNDUP(($D2-$B2)*0.33, 0))

我转到另外 3 个单元格,并将每个单元格设置为我想要填充“低”、“中”和“高”范围的颜色。

我希望“条件格式”配置能够利用指定给这 3 个对应单元格之一的颜色,以防将来我决定使用不同的颜色;进行这种转换会更快,而不是转到每个单独的单元格进行颜色更改。

答案1

如果您可以使用 VBA,我有一个解决方案。

这将根据规则测试 C 列中每个单元格的值。无论匹配哪条规则,它都会将背景颜色从参考单元格复制到正在测试的单元格中。每次在工作簿中添加或删除值时,它都会执行此操作。

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
    For Each Cell In Range("C3").Resize(Worksheets(1).Cells(Rows.Count, "C").End(xlUp).Row - 2, 1)
        lCell = Cell.Offset(0, -1)
        rCell = Cell.Offset(0, 1)
        If Cell < WorksheetFunction.RoundUp((rCell - lCell) * 0.33, 0) + lCell Then
            Cell.Interior.Color = Range("F3").Interior.Color
        Else
            If Cell > rCell - WorksheetFunction.RoundUp((rCell - lCell) * 0.33, 0) Then
                Cell.Interior.Color = Range("F4").Interior.Color
            Else
                If WorksheetFunction.Or(Cell >= WorksheetFunction.RoundUp((rCell - lCell) * 0.33, 0) + lCell, Cell <= rCell - WorksheetFunction.RoundUp((rCell - lCell) * 0.33, 0)) Then Cell.Interior.Color = Range("F5").Interior.Color
            End If
        End If
    Next Cell
End Sub

答案2

我想到了一个同时利用 VBA 和常规 Excel 界面的解决方案。

我有一个单元格,其中有 =SUM 函数,标记了我想要更新格式的所有单个单元格。

我想要模仿其格式的单元格(在本例中为 C2)的调用方式如下:

范围("C2").复制

从那里我利用了一个 VBA 宏算法,该算法从单元格 A30 中提取内容,并收集我想要应用条件格式的各个单元格位置(在本例中为 A30),作为字符串。

cellLocations = Range("A30").公式

然后使用适当的子字符串和替换函数使其具有正确的布局(将 + 更改为逗号 (,) 并删除括号和 =SUM)以便使用以下利用“格式刷”的 PasteSpecial 函数:

范围(单元格位置).PasteSpecial 粘贴:=xlPasteFormats

适当布局中的 cellLocations 变量的示例为:

A2,B2,B5,C9,H8

需要逗号作为分隔符/定界符。

任何更好或更直接的解决方案都将受到赞赏。

相关内容