Não parece haver uma maneira nativa de fazer isso a partir da GUI.
No entanto, não é difícil no VBA.
Essa rotina definirá a cor do primeiro plano / texto
de cada célula no intervalo Target
para uma cor
linearmente interpolado entre a cor Lo
e a cor Hi
,
com base em como o valor na célula se compara ao Lo_Val
e ao Hi_Val
:
Sub Colorize(Target As Range, Lo_Val, Hi_Val, Lo_R, Lo_G, Lo_B, Hi_R, Hi_G, Hi_B)
Dim R, G, B As Long
delta_val = Hi_Val - Lo_Val
If (delta_val <= 0) Then
MsgBox "Lo_Val and Hi_Val must not be the same, or in the wrong order."
Exit Sub
End If
If (Application.Min(Lo_R, Lo_G, Lo_B, Hi_R, Hi_G, Hi_B) < 0 _
Or Application.Max(Lo_R, Lo_G, Lo_B, Hi_R, Hi_G, Hi_B) > 255) Then
MsgBox "Invalid color(s)."
Exit Sub
End If
Delta_R = Hi_R - Lo_R
Delta_G = Hi_G - Lo_G
Delta_B = Hi_B - Lo_B
For Each c In Target
If (c < Lo_Val Or c > Hi_Val) Then
c.Font.Color = 0 ' Black
' Alternatively, set values < Lo_Val to the Lo color
' and set values > Hi_Val to the Hi color.
' Or do nothing, leaving them with whatever color they have now.
Else
Diff_Val = c - Lo_Val
' We probably could just compute (c - Lo_Val) / delta_val
' at this point, but I'm not sure how well that would work
' with the rounding.
R = Round(Lo_R + Delta_R * Diff_Val / delta_val)
G = Round(Lo_G + Delta_G * Diff_Val / delta_val)
B = Round(Lo_B + Delta_B * Diff_Val / delta_val)
' Use 256& to get a constant with value 256 and type Long.
c.Font.Color = R + 256& * G + 256& * 256& * B
End If
Next c
End Sub
Veja Como adiciono o VBA no MS Office?
para informações gerais sobre como inserir e usar isso.
Eu escrevi isso como uma rotina com parâmetros para flexibilidade.
AFAIK, é impossível chamar uma rotina VBA com parâmetros
da interface do Excel normal.
Você pode querer definir uma macro stubby (com os parâmetros no )
que chama o acima com os parâmetros que você deseja; por exemplo,
Sub Macro1()
'
' Macro1 Macro
'
Call Colorize(Range("A1:J1"), 1, 10, 255, 0, 0, 0, 0, 255)
End Sub
que definirá números baixos (1 e acima) em tons de vermelho,
e números altos (10 e abaixo) em tons de azul.
Por exemplo, usando os números da pergunta, isso nos dá
(ondeeuaumenteimanualmenteotamanhodafonteparatornarascoresmaisvisíveis).
Vocêpodechamarissode"Desenvolvedor" → "Código" → "Macros",
ou ligá-lo a um botão.
Ou, se você quiser que a formatação aconteça automaticamente
sempre que você alterar um valor,
você pode usar uma rotina Worksheet_Change
para chamar Colorize
.
E, para que isso se comporte mais como a formatação condicional,
você pode codificá-lo para definir Lo_Val
e Hi_Val
aos valores mínimo e máximo atualmente no intervalo.
Notas:
- A linha
Dim R, G, B As Long
parece não ser necessária.
Mas eu recebo erros de estouro quando uso 256
em vez de 256&
.
- A ciência de como o olho humano e o cérebro humano percebem a cor
é muito complicado.
A interpolação linear de valores RGB é provavelmente
não é o melhor algoritmo para gerar um intervalo graduado / espectro de cores.