条件格式 - 多条件、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对应列号的位置。
我在 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对应列号的位置。