【问题标题】:Conditional Formatting - Multi-conditional, InStr-check, lowest value (part 2)条件格式 - 多条件、InStr 检查、最小值(第 2 部分)
【发布时间】:2021-04-30 08:00:58
【问题描述】:

我在 2019 年问了一个问题,我记得有一次我被要求创建一个新问题,而不是拉回旧问题并在那里再问第二个问题。 --> Conditional Formatting - Multi-conditional, InStr-check, lowest value

我的用例需要调整,而我又在为那个而苦苦挣扎。 如果在我的 Excel 电子表格中有以下 ListObject/Table,并且我想为每一行突出显示最便宜的价格。这适用于以下条件格式公式:

我还需要的是,只要列中有以“AAA”或“XXX”开头的值(在本例中为列 [H]、[I] 或 [J]),则应突出显示该值,即使另一列中的值可能较低。但是,只有在 [D] 列中的值为“A”时,才应应用此规则。为简单起见,那些经过特殊处理的列总是从列 [H] 开始并持续进行。它们不会发生在某处之间。

不会出现 [H] 和 [I] 列都被填满的情况。它总是非此即彼。但列[J] 可以有额外的值。

到目前为止我所拥有的:

=$D3="A"

格式化没有高亮显示的单元格,应用于列 [J] 到 [AC] 作为下面下一条规则之上的额外规则,当列 [D] 具有值时,范围 [H:J] 之后的每个单元格都将突出显示为白色一个”。

@ProfoundlyOblivious 帮助我完成了主要公式:

=IFERROR(AND(H3>0,H3=SEARCH("A",$D3)*H3*1/SEARCH("AAA",H$2)^-1),IF(H3<>"",H3=MIN($H3:$AC3),""))

不起作用的是,例如,在第 2184 到 2189 行中根本没有突出显示。它应该突出显示 [H] 列中的值,因为它们显然是最低的值。但不知何故,主要公式需要调整。

编辑:我的尝试是这个,但它错过了一些行。现在可以看到第 2184 到 2189 行中的深绿色单元格,但是如果最便宜的价格在 [I] 列中,它会遗漏一些。

=IF(J3<>"",J3=MIN($H3:$J3),"")

【问题讨论】:

  • 第一个屏幕截图上的列标题与帖子中使用的不同,最后一个屏幕截图根本没有列标题,这使您难以理解您的问题。一个条件规则应该足以涵盖所有情况,但您需要以清晰的方式呈现 CF 的算法。
  • 你是对的,对不起。我编辑了我的帖子。
  • 要着色的范围仅包含空单元格或值>0。您想为行中的最小值着色。如果 D 列等于“A”,则仅检查列标题开头带有“AAA”或“XXX”的列。对吗?
  • 一行中的单元格可以有空单元格或高于 0 的值。如果列 [D] 包含值“A”,则应考虑标题部分为“AAA”和“XXX”的列只为“什么是最低价”。如果列 [D] 的值为“B”,则应考虑整行(从列 [H] 到无穷大)来确定“最低价格是多少”。

标签: excel conditional-formatting


【解决方案1】:

您可以通过以下公式使用单个规则:

=LOOKUP(2,1/FREQUENCY(0.01,
($H3:$T3)*((($D3<>"A")+(LEFT($H$2:$T$2,3)="AAA")+(LEFT($H$2:$T$2,3)="XXX"))>0)),
COLUMN($H$2:$T$2))=COLUMN()

带有一些随机数据的示例结果:

FREQUENCY 返回一个类似于:{0,0,0,1,0,0,0,0,0,0,0} 的数组,其中1 表示行中最小值大于或等于0.01 的单元格的位置(如果您的值低于1E-300,请使用1E-300 0.01)

乘以((($D3&lt;&gt;"A")+(LEFT($H$2:$T$2,3)="AAA")+(LEFT($H$2:$T$2,3)="XXX"))&gt;0) 会将不满足任何条件的所有单元格归零:

  • 行标题等于“A”
  • 列标题以“AAA”或“XXX”开头

LOOKUP 忽略1/0 错误,查找FREQUENCY 返回的唯一1 的位置,并返回对应的列号。

【讨论】:

  • 我对 [D] 列中没有“A”的所有案例都有疑问。它标记了不是最低的值,这是奇怪的,因为它适合你。
  • 我测试了arround,行为有点奇怪。值在几乎相同的范围内,例如 590 到 699。错误的值将被标记。如果测试一个 500 或 400 的呼叫,则没有任何变化。但是如果我设置一个像 100 这样的值,那么它会标记正确的值。编辑:当测试时我必须选择的最低值正好是第二低值的 50%。
  • 当 [D] 不是 'A' 时,你能测试你的例子,让最后一列的值最低吗?选择了一个离第二低的值不远的值。谢谢 。正是这对我不起作用。
  • @smartini 我已经修复了公式中的一个明显错误 - 乘以段落中描述的部分。在某些情况下,它会将值乘以 2,而不是 0 或 1(取决于 OR 条件)。我不确定这个错误是否会导致最后一列出现问题,但现在请测试一下。如果由于某种原因它仍然产生意外结果 - 请编辑问题并添加重现问题的确切值并告诉我。
  • 虽然对我来说不是那么明显,但我真的试图理解公式的每一个部分,但公式和我这辈子不会交朋友。它现在就像一个魅力!我会将您的答案标记为正确的解决方案。谢谢!
猜你喜欢
  • 1970-01-01
  • 2015-10-31
  • 2011-12-23
  • 1970-01-01
  • 1970-01-01
  • 2013-04-23
  • 1970-01-01
  • 2021-01-14
  • 2018-05-21
相关资源
最近更新 更多