excel - 带硬停止的条件格式颜色渐变

我在 Excel 工作表中有一列数据,其中包含正值和负值。我想要做的是应用条件格式(颜色渐变),从深绿色到浅绿色表示正值,浅红色到深红色表示负值。

但是,我似乎无法做到这一点。如果我应用从最大值到零的条件格式,零为浅绿色,那么所有负值最终也会变成浅绿色。有没有办法让条件格式仅适用于某个值而不是超出?我可以类似地为负值制作条件格式,但它再次将正值着色为浅红色。如果我将两者都放在同一张表中,则优先级最高的获胜。

更新:虽然这真的很难看,但我决定尝试找出哪些单元格大于 0(或者实际上是中点值,在这种情况下为 ~1.33 ) 并且哪个更低,并将单元格引用显式设置为这些单元格。所以我尝试了这样定义的条件格式(正绿色刻度):

<x:conditionalFormatting sqref="$E$5 $E$6 $E$10 $E$13 $E$15 $E$17 $E$18 $E$19 $E$22 $E$24 $E$25..." xmlns:x="http://schemas.openxmlformats.org/spreadsheetml/2006/main">
  <x:cfRule type="colorScale" priority="1">
    <x:colorScale>
      <x:cfvo type="num" val="1.13330279612636" />
      <x:cfvo type="num" val="1.91050388235334" />
      <x:color rgb="d6F4d6" />
      <x:color rgb="148621" />
    </x:colorScale>
  </x:cfRule>
</x:conditionalFormatting>

像这样(负红色刻度):

<x:conditionalFormatting sqref="$E$4 $E$7 $E$8 $E$9 $E$11 $E$12 $E$14 $E$16 $E$20 $E$21 $E$23 $E$26 $E$28 $E$29 $E$30..." xmlns:x="http://schemas.openxmlformats.org/spreadsheetml/2006/main">
  <x:cfRule type="colorScale" priority="1">
    <x:colorScale>
      <x:cfvo type="num" val="0.356101709899376" />
      <x:cfvo type="num" val="1.13330279612636" />
      <x:color rgb="985354" />
      <x:color rgb="f4dddd" />
    </x:colorScale>
  </x:cfRule>
</x:conditionalFormatting>

这很好用!直到您尝试排序为止(我在此表上有一个自动过滤器),并且它搞砸了单元格分配。所以现在我的值大于 1.33 应该(并且确实)应用了绿色渐变规则,但现在被红色渐变引用(因此最终变成淡红色)。

我尝试了相对和绝对单元格引用(即减去 $),但这似乎也不起作用。

最佳答案

我无法找到使用默认 Excel 条件格式来完成这项工作的方法。可以在 VBA 中创建自己的条件格式算法来启用此功能,但是:

Sub UpdateConditionalFormatting(rng As Range)
    Dim cell As Range
    Dim colorValue As Integer
    Dim min, max As Integer

    min = WorksheetFunction.min(rng)
    max = WorksheetFunction.max(rng)

    For Each cell In rng.Cells
        If (cell.Value > 0) Then
            colorValue = (cell.Value / max) * 255
            cell.Interior.Color = RGB(255 - colorValue, 255, 255 - colorValue)
        ElseIf (cell.Value < 0) Then
            colorValue = (cell.Value / min) * 255
            cell.Interior.Color = RGB(255, 255 - colorValue, 255 - colorValue)
        End If

        Next cell
    End
End Sub

上面的代码将生成以下配色方案,并且可以轻松修改以适应您心目中的任何调色板:

您可以在宏中使用此代码,或将其放入 Worksheet_Change 事件中并自动更新(请注意,当安装在 Worksheet_Change 事件处理程序中时,您将失去撤消功能):

Sub Worksheet_Change(ByVal Target As Range)
    UpdateConditionalFormatting Range("A1:A21")
End Sub

https://stackoverflow.com/questions/33925935/

相关文章:

python - 将列表格式化为表格输出的列(python 3)

java - 任何可用于 java 文件的命令行格式工具?

c++ - clang-format:总是打破所有参数,每行一个

algorithm - 如何有效地为特定宽度的字符串找到理想的列数?

SQL Server 2005 For XML Explicit - 需要帮助格式化

layout - 更改 latex 文档中间的纸张尺寸?

c# - 获取格式化字符串以表示 UTC 偏移量的最佳方法是什么?

javascript - 从字符串,javascript 中获取 x 像素值文本的最可靠方法

html - 动态生成的 HTML 的格式 - 没人关心吗?

ruby-on-rails - Ruby on Rails 中的自定义格式