![Excel 条件格式:根据不同单元格的现有填充颜色使用填充颜色](https://linux22.com/image/1565105/Excel%20%E6%9D%A1%E4%BB%B6%E6%A0%BC%E5%BC%8F%EF%BC%9A%E6%A0%B9%E6%8D%AE%E4%B8%8D%E5%90%8C%E5%8D%95%E5%85%83%E6%A0%BC%E7%9A%84%E7%8E%B0%E6%9C%89%E5%A1%AB%E5%85%85%E9%A2%9C%E8%89%B2%E4%BD%BF%E7%94%A8%E5%A1%AB%E5%85%85%E9%A2%9C%E8%89%B2.png)
下表代表我在 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
需要逗号作为分隔符/定界符。
任何更好或更直接的解决方案都将受到赞赏。