【问题标题】:Conditional formatting using the INDIRECT function fails with boolean AND or OR or with cells containing formulas使用 INDIRECT 函数的条件格式化因布尔 AND 或 OR 或包含公式的单元格而失败
【发布时间】:2017-05-23 16:36:05
【问题描述】:

我有以下功能来检查列 L 是否包含“已完成”一词,我使用 INDIRECT 能够使用条件格式为整行着色:

 =INDIRECT("l"&ROW())="completed"

此功能有效。但是,我需要扩展它,我也想使用基于额外单元格的条件格式,所以我尝试了这个:

=AND(INDIRECT("l"&ROW())="completed";INDIRECT("m"&ROW())="duplicate")

当我在 Excel 工作表中使用第二个函数时,它们会给出正确的 TRUEFALSE

此外,我需要对单元格中公式的结果进行自定义格式设置。我尝试了以下方法:

=INDIRECT("n"&ROW())=123456

这仅在我删除单元格中的公式并将结果本身作为数字时才有效。同样,该函数在粘贴到工作表单元格时起作用。

有没有办法在 Excel 中进行这项工作,或者条件格式函数的功能是否有限制?

如果您问:AND(1;1) 有效并使所有内容变黄,AND(INDIRECT("n"&ROW())=123456;1) 无效,将 AND 替换为 OR 也无效。

分号是因为我在荷兰语地区。如果您在英语语言环境中,请将其替换为逗号。

【问题讨论】:

  • 不清楚您为什么需要INDIRECTINDIRECT("l"&ROW())INDEX($L:$L, ROW()) 更好,但如果您的条件格式区域从第 1 行开始,您应该可以使用 $L1;如果您的条件格式区域从第 2 行开始,您应该可以使用 $L2
  • @jeeped,条件格式适用于所有行,因此使用 L1 将仅适用于第一行,我需要为每一行创建不同的规则。该建议来自另一个 So question。但如果有其他方法,我很乐意尝试!
  • 不,条件格式不是这样工作的。您输入区域左上角单元格的公式,然后 Excel 会将修改后的公式应用于区域中的其他单元格,就像您在那里复制它一样。试试看。
  • @Abel 不,通过使用$L1,行将发生变化,而列将保持不变。 $ 将 Column 锁定为绝对值,而行前缺少 $ 使其成为相对值。
  • ... 如果您不希望 CFR 在列表下方进行抵消,则如果为 True 则停止。

标签: excel excel-formula excel-2013 excel-r1c1-notation


【解决方案1】:

不知道为什么这在Conditional Formatting 中不起作用。但是您可以简单地将AND 函数替换为*,例如:

=(INDIRECT("l"&ROW())="completed")*(INDIRECT("m"&ROW())="duplicate")

【讨论】:

    【解决方案2】:

    您必须根据 xlR1C1 公式进行思考才能理解 CFR。基于公式的 CFR 将其视为 =RC12="completed" 或更完整的 =AND(RC12="completed", RC13="duplicate")

    无论您将 xlR1C1 公式粘贴到哪个单元格,它都不会改变;正是通过这种方式,CFR 可以应用于广泛的单元格,而无需花费计算周期来更新每个单元格的公式。 RC12 表示“您所在行的 L 列中的单元格”。如果向下填写、向右填写或复制到任何其他位置,则不会更改。

    现在,除非您实际使用 xlR1C1(文件、选项、公式、使用公式、R1C1 参考样式),否则您必须将 xlR1C1 转换为 xlA1 样式。如果将 CFR 应用于从第一行开始的多行,则 R 变为 1,C12 变为 $L。

    'xlR1C1
    =AND(RC12="completed", RC13="duplicate")
    'xlA1
    =AND($L1="completed", $M1="duplicate")
    

    如果您将 CFR 应用于从第 2 行开始的范围,请将 $L1 更改为 $L2,将 $M1 更改为 $M2。


    在使用 xlA1 样式时,不将 xlR1C1 样式公式直接放入 CFR 创建对话框的其他原因是 xlA1 中实际上有一个 RC12 单元格。

    【讨论】:

    • 您最后的评论有点令人困惑。因为我想跳过第一行(它包含标题),所以我使用了$L2="x",但结果是使用该条件格式化行上方的行(如:对于每一行,它将查看下一行该列中的值,并为原始行着色)。除此之外:它有效!谢谢! (旁注:INDIRECT 仍然很奇怪,正如用户 Nitesh 所提到的那样,正如这里所建议的那样:stackoverflow.com/a/13865032/111575)。
    • 顺便说一句,如果您使用L2 而不是$L2,则只有第一个单元格会被着色。除此之外,它的工作原理相同。
    • 好的,如果 CFR 的 Applies to: 区域从第 1 行开始,则使用 $L1;如果它从第 2 行开始,则使用 $L2。 L1 不起作用的原因是因为它不是 RC12,它是 RC,它不等于 $L1 而是 A1。点击 F5 (GoTo),输入 RC12 并回车。您将转到第 471 列的第 12 行;在 xlA1 中这是 RC12,在 xlR1C1 中是 R12C471。
    • 是的,apply-to 区域只选择了适用的列,因此当然会自动包含第一行。这次讨论给了我一些宝贵的见解,很多事情变得更容易了,再次感谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-13
    • 1970-01-01
    • 2022-11-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多