条件格式 - 多条件、InStr 检查、最低值(第 2 部分)

Conditional Formatting - Multi-conditional, InStr-check, lowest value (part 2)

我在 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] 之后的每个单元格都将突出显示为白色值“A”。

@ProfoundlyOblivious 帮我解决了主要公式:

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

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

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

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

您可以使用具有以下公式的单个规则:

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

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

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

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

  • 行 header 等于“A”
  • 第 header 列以“AAA”或“XXX”开头

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