我希望一个单元格根据另一个单元格中的值采用渐变颜色进行格式化。例如,我希望单元格A1
和根据和A2
中的值突出显示。如果我在 Excel 中选择从红色到黄色再到绿色的突出显示(即“条件格式”下的“颜色刻度”),我会期望 if和then将以红色突出显示,而将以绿色突出显示。本质上,我想用表中的一组值构建热图,并将该热图叠加在一个单独的、大小相同的值表上。B1
B2
B1 = 1
B2 = 2
A1
A2
我见过各种各样的帖子讨论如何基于另一个单元格以非动态方式格式化一个单元格(例如,这里和这里),但我找不到关于如何做我想做的事情的描述。可能吗?
如果无法为此建立公式,我会很乐意将颜色比例颜色复制到B1:B2
,A1:A2
但我也找不到这样做的方法。
答案1
当您将其粘贴到Developer -> Visual Basic
您正在工作的表下时,它应该会起作用。确保更改范围。
Sub Worksheet_Change(ByVal Target As Range)
Set Rng = Range("A1:B2")
If Application.Intersect(rng1, rng2) Is Not Nothing Then
Dim Min, Max, Index As Double
Dim Red, Green As Integer
Dim Cell As Range
Dim Rng As Range
Min = Minimum(Rng)
Max = Maximum(Rng)
For Each Cell In Rng
Index = (Cell.Value - Min) / (Max - Min)
Red = 255 * ListMin(1, 2 - 2 * Index)
Green = 255 * ListMin(1, 2 * Index)
Cell.Offset(RowOffset, ColumnOffset).Interior.Color = RGB(Red, Green, 0)
Next Cell
End If
End Sub
Function Maximum(Cells As Range)
Maximum = Application.WorksheetFunction.Max(Cells)
End Function
Function Minimum(Cells As Range)
Minimum = Application.WorksheetFunction.Min(Cells)
End Function
Function ListMax(ParamArray Values() As Variant)
ListMax = Application.WorksheetFunction.Max(Values)
End Function
Function ListMin(ParamArray Values() As Variant)
ListMin = Application.WorksheetFunction.Min(Values)
End Function
其中大部分应该是相当不言自明的,如果您有任何疑问,请随时发表评论。