【问题标题】:Conditional Formatting - Color Scale entire row based on one column条件格式 - 根据一列对整行进行颜色缩放
【发布时间】:2015-08-24 05:43:52
【问题描述】:

假设我想根据列中的值对完整的行进行颜色缩放(使用 excel 条件格式菜单中的内置颜色缩放选项)。我如何实现这一目标?请看下图

【问题讨论】:

    标签: excel conditional-formatting vba


    【解决方案1】:

    如果我理解正确的话,我一直在与同样的问题作斗争。即根据一列中的值格式化整行,其中值已通过 Excel 的色标进行格式化。

    我发现这个真正可笑简单的解决方法,包括将您的颜色缩放单元格复制到 word 中,然后返回到 excel 中,之后您可以删除这些值并将它们替换为任何内容在不改变格式的情况下你想要的值:

    https://superuser.com/questions/973921/copy-conditional-formatting-3-color-scheme-to-another-tab/973974#973974?newreg=fc5ca6d04a5a406fa39cd4796b6a539e

    所有功劳归用户 Raystafarian

    【讨论】:

    • 谁投了反对票,你能解释一下原因吗?对于我提出的问题,这似乎是一个很好的非 VBA 解决方案。
    • 我不是反对者,但这种方法的一个缺点是它不会在数据更改时自动更新颜色。如果对电子表格进行了更改,使产品 A 的利润突然变为 12%,则产品 A 的行仍然是橙色的,直到再次执行此解决方法。
    • 是的,条件格式的全部意义在于它使用单元格的值动态地更新。这个答案完全删除了该功能。
    【解决方案2】:

    我在 Mrexcel 的 post 中找到了 Range.DisplayFormat.Interior.Color 的一处房产。使用此属性,我能够获得有条件格式单元格的颜色并将其用于其他行。抓住的是,它只适用于 2010 年以后的 Excel。我有 excel 2010,所以它对我有用。 这是确切的代码 -

    For i = rowStart To rowEnd
        For j = columnStart To columnEnd
            Cells(i, j).Interior.Color = Cells(i, 4).DisplayFormat.Interior.Color
        Next
    Next
    

    【讨论】:

      【解决方案3】:

      确实,您不需要 VBA 来执行此操作。

      这里要记住的一件事是,您将无法使用单一的条件格式规则来实现您想要的行为;对于每个基于销售的行颜色定义,您必须有一个单独的规则。第二件事:我发现在 Excel 中使用命名范围作为规则而不是常规公式更容易实现所需的条件格式行为。

      考虑到这些问题,请按照以下步骤创建命名范围,然后创建条件格式规则。

      1. 首先,选择工作表上的第一个销售单元格(最上面一行)
      2. 接下来,为单元格命名为“SALES”。通过按 Ctl+F3 或从功能区中选择 Formulas->Name Manager 来执行此操作。然后选择New..。在Name: 中输入SALES,在Refers to: 中输入=$XN,其中X 是第一个销售单元格的列,N 是行号。点击Enter
      3. 现在选择您希望展示此行为的整个单元格范围
      4. 选择Home->Conditional Formatting->New Rule...
      5. 选择Use a Formula to Determine Which Cells to Format并输入=SALES=number,其中数字是您希望触发颜色的销售编号
      6. 选择FormatFill 选项卡。现在您需要为您选择的销售编号确定您想要的背景颜色。您还可以选择其他格式选项,例如字体颜色等。
      7. 点击确定,确定,确定。为您想要的每个不同的销售数字/颜色组合重复步骤 3 到 6。如果您想要“所有销售额小于 X”的颜色,请在规则中输入 =SALES&lt;number(=AND(SALES<=CEILING, SALES>=FLOOR),其中上限和下限是上限和下限。如果您想要“所有销售额大于 X”的颜色,您可以使用 =SALES&gt;number

      编辑:

      要使输入条件公式更容易一些,您可以使用“如果为真则停止”功能。转到Home->Conditional Formatting->Manage Rules,然后在下拉菜单中选择This Worksheet。现在您将看到适用于您的工作表的所有规则的列表,并且每个规则的右侧都会有一个“如果为真则停止”复选框。

      对于每个行颜色规则,勾选“如果为真则停止”复选框。现在您的公式可以是这样的(仅作为示例):

      • =Sales&gt;25 绿色规则
      • =Sales&gt;10 黄色规则
      • =Sales&gt;0 代表红色规则

      等等,而不是像这样:

      • =AND(Sales&gt;0,Sales&lt;=10) 代表红色规则
      • =AND(Sales&gt;10,Sales&lt;=25) 黄色规则
      • =Sales&gt;25 绿色规则

      Stop If True 框意味着一旦将格式规则应用于单元格,该单元格将不会根据适用于它的任何其他规则再次格式化。请注意,这意味着在使用 Stop If True 时,规则的顺序很重要。

      【讨论】:

      • 我认为我需要以更好的方式表达我的问题,我需要它用于 excel 提供的“色阶”选项。我不想自己指定颜色。不过,感谢您的回答,对于如何使用命名范围进行条件格式设置非常有见地。去实践吧:)
      • 啊好吧,我误会了。使用内置色标选项无法执行此操作。您必须使用 VBA 自己完成。我当然不知道你的用例,但在我看来,你最好以上述方式选择自己的颜色,而不是试图将 Excel 的色阶功能硬塞到使用相对引用中(它只是' t 必须这样做)。
      • 我似乎记得不久前在这种方法中遇到了死胡同。使用 VBA 无法挑选出单元格的条件格式颜色,因此我不得不从头开始计算规则。
      • 我试图寻找答案,我从 mrexcel 上的帖子中了解了这个属性“Range.DisplayFormat.Interior.Color”,它确实给了我条件格式颜色的颜色. 感谢 Palmer 小姐和 Rick Teachey 的帮助。我应该发布自己的答案吗?
      • @MissPalmer 你会对此感兴趣的。 ^^
      【解决方案4】:

      您可以使用标准条件格式菜单执行此操作,无需 VBA。您可以选择指定自己的公式的选项,并且可以引用除要突出显示的单元格之外的单元格(用“$”锁定列)。

      Background Reading

      【讨论】:

      • 我可以自己提供特定格式(背景、边框或字体颜色)的“非色标”。这里我想使用excel内置的色标。
      • 很公平。您可以手动使用 5 个颜色渐变(例如,前 20% 的人口为深红色,接下来的 20% 为浅红色等,已将最大值和最小值提取到参考单元格中),但如果您知道 VBA,它可能更容易在这个阶段使用它。
      【解决方案5】:

      我想我已经找到了解决方案。对于行中所有单元格的任何数字范围,我可以实现 5 度的色阶,并且可以选择仅影响包含数据的单元格。

      这是通过创建 5 个基于以下内容的条件格式规则来实现的:

      =AND(D4<>"",$D4<>"",($D4-(MIN($D$4:$D$20)-1))/(MAX($D$4:$D$20)-(MIN($D$4:$D$20)-1))*5<=2)
      

      AND 函数 D4&lt;&gt;"" 中的第一个参数用于如果您只希望包含数据的单元格受到影响,如果您希望对整行数据进行颜色编码,请将其删除。

      第二个参数,$D4&lt;&gt;"" 指向行中包含要计算的值的单元格 - 请记住 $ 锁定列

      第三个参数$D4-(MIN($D$4:$D$20)-1))/(MAX($D$4:$D$20)-(MIN($D$4:$D$20)-1))*5&lt;=2评估值在整个值范围内的位置并将其转换为1到5之间的数字,更改此参数末尾的*5可以让您有更多的步骤在你的颜色序列中。您将需要相应地添加更多条件规则。 &lt;=2 表示这是序列中的第二个颜色步骤。

      颜色 3 和 4 使用相同的条件,但 &lt;=2 分别更改为 &lt;=3&lt;=4

      如果您总是希望范围内的最小数字作为第一个色标,而范围内的最大数字作为最高数字的色标,则需要对第一个和最后一个色标进行小修改。

      对于范围内的最小数,适配如下:

      =AND(D4<>"",$D4<>"",OR($D4=MIN($D$4:$D$20),($D4-(MIN($D$4:$D$20)-1))/(MAX($D$4:$D$20)-(MIN($D$4:$D$20)-1))*5<=1))
      

      OR($D4=MIN($D$4:$D$20) 的引入捕获了范围内的第一个数字

      同样

      =AND(D4<>"",$D4<>"",OR($D4=MAX($D$4:$D$20),($D4-(MIN($D$4:$D$20)-1))/(MAX($D$4:$D$20)-(MIN($D$4:$D$20)-1))*5<=5))
      

      使用OR($D4=MAX($D$4:$D$20) 捕获范围内的最大数

      请注意,Stop if True 必须为所有条件打勾,条件必须按顺序从最小步长到最大步长排序。

      Image of Conditional Formatting Rules Manager

      【讨论】:

        猜你喜欢
        • 2021-04-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-08-09
        • 1970-01-01
        • 1970-01-01
        • 2014-07-04
        相关资源
        最近更新 更多