【问题标题】:Conditional Formatting based on values in a separate column based on Data Validation from a separate sheet基于来自单独工作表的数据验证的单独列中的值的条件格式
【发布时间】:2016-10-04 14:36:10
【问题描述】:

我正在制作一个电子表格日志:
- sheet1上的主要条目
- sheet2 上的名称和数据的静态列表

在 sheet1 中,我根据 sheet2 中的名称通过数据验证输入值。稍后我在 sheet1 中添加一个值。需要将此值与 sheet2 中列出的最小值和最大值进行比较,然后根据与 sheet2 中值的偏差百分比通过条件格式进行颜色编码。例如:

在 sheet1 我有数据:

     A                          B
1    value                      OG 
2    British Brown Ale          1.045 

British Brown Ale 通过从数据验证列表填充的下拉列表输入。在B2 中,“OG”的值为1.045

在 sheet2 中,数据如下所示:

     A                          B          C
1    value                      min OG     max OG 
2    British Brown Ale          1.040      1.052 

在带有“British Brown Ale”的行中:

  • 在第 2 列(“Min OG”)中,我的值为 1.040
  • 在第 3 列(“最大 OG”)中,我的值为 1.052

期望的结果

我需要做:

  1. 范围从 1.040 到 1.052 100% 范围内,颜色代码为绿色,
  2. 如果 sheet1!B2 中的值超出此范围的 10%,则它会被标记为黄色,
  3. 超过 10% 将被标记为红色。

如何使用可以比较上述值的条件格式?

我需要脚本来实现这一点吗?

【问题讨论】:

    标签: google-sheets formula gs-conditional-formatting


    【解决方案1】:

    仅使用公式是可能的。最好的方法是只使用ArrayFormula 以使所有公式自动展开。

    Sheet2

    添加两列:“min - 10%”和“max + 10%”

    在 D2 单元格中:

    =ArrayFormula(OFFSET(B2,,,COUNTA(A2:A))/1.1)
    

    在单元格 E2 中:

    =ArrayFormula(OFFSET(C2,,,COUNTA(A2:A))*1.1)
    

    结果:

    Sheet1

    4个公式得到“min”、“max”、“min-10%”、“max+10%”

    在 C2 单元格中:

    =ArrayFormula(VLOOKUP(OFFSET(A2,,,COUNTA(A2:A)),sheet1!A:E,2,0))
    

    在 D2 单元格中:

    =ArrayFormula(VLOOKUP(OFFSET(A2,,,COUNTA(A2:A)),sheet1!A:E,3,0))
    

    在单元格 E2 中:

    =ArrayFormula(VLOOKUP(OFFSET(A2,,,COUNTA(A2:A)),sheet1!A:E,4,0))
    

    在单元格 F2 中:

    =ArrayFormula(VLOOKUP(OFFSET(A2,,,COUNTA(A2:A)),sheet1!A:E,5,0))
    

    还有一个有颜色的公式:

    =ArrayFormula(if(--(OFFSET(B2,,,COUNTA(A2:A))<OFFSET(E2,,,COUNTA(A2:A)))+B2>F2,"red",if((OFFSET(B2,,,COUNTA(A2:A))>=OFFSET(C2,,,COUNTA(A2:A)))*(+OFFSET(B2,,,COUNTA(A2:A))<=OFFSET(D2,,,COUNTA(A2:A))),"green","yellow")))
    

    结果:

    Sheet1 的条件格式规则

    选择B列,新增3条条件格式(CF)规则,自定义公式:

    首先,涂上绿色:

    =$G1="green"
    

    接下来,画黄色:

    =$G1="yellow"
    

    接下来,涂上红色:

    =$G1="red"
    

    那么你可以隐藏额外的列。

    结果:


    我认为,在 CF 中仅使用 3 个巨大的数组公式就可以做到这一点,无需额外的列,但很难构建一个。

    【讨论】:

    • 我对 ArrayFormula 完全不熟悉,我不完全确定我理解它在你设置它的方式中的作用 - 但我会努力完成这项工作并在这里报告.在您发布此内容之前,我制作了一个在单元格中使用时触发绿色的工作公式,但由于我引用了不同的工作表,所以我无法使用条件格式,这显然是不可能的。 =IF(AND(H4*1000&gt;INDEX(Styles!M:M,MATCH(F4,Styles!C:C,0)),H4*1000&lt;=INDEX(Styles!N:N,MATCH(F4,Styles!C:C,0))),"Inside Range: Green","Outside Range")
    • 无法在一封邮件中全部回复。清除; F4 是经过验证的数据 "British Brown Ale"Styles! 是 sheet2。 H4 是 sheet1 中的 OG。列Styles!M 是参考min OGStyles!N 是参考 max OG
    • 有什么方法可以使用 ArrayFormula 方法做到这一点,而无需编辑 Sheet2?它是官方数据表的直接 1:1 副本,并且不希望对其进行任何更改。最后,总共将有 3 个 Min/Max 范围,这些范围将基于此进行颜色编码,因此额外的列越少越好。参考表不是很大——只有 119 种样式——所以“繁重”的算法应该可以工作。
    • 是的,您需要将 sheet2 中的公式替换为 sheet1
    • 一旦我设法了解不同公式的工作原理,这实际上很快就可以应用到我的工作表中 - 尽管空间非常密集。我已经使用了超过一个完整的字母表值 OFFSET 范围,但替代方案 - 将大部分内容放入一个公式 - 变得非常复杂,我需要添加更多信息。这很好用,谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-03-24
    • 2015-10-07
    • 1970-01-01
    • 1970-01-01
    • 2018-03-01
    • 2023-02-03
    • 1970-01-01
    相关资源
    最近更新 更多