Return 如果前面的单元格等于值,则连续单元格中的值

Return value in consecutive cells if preceding cell equals value

我有一个 Ws 和 Ls 列(称为 A 列),对应于输赢,以及中间的一些空白单元格。在相邻的列(称为 B 列)中,我正在尝试使用条件格式来 return A 列中的值,或者如果连续有 2 个连续的 Ls,我想要接下来的 10 个连续的单元格为空,然后从 A 列中的任何内容中取回。

我觉得我非常精通条件格式,但这让我完全难住了,我想不出任何接近的东西。

这是我希望它看起来像的示例:

如您所见,有时两个连续的 L 是背靠背的,有时它们之间出现 space,但无论哪种方式,我都需要相同的结果(即 10 个连续的空白单元格紧接着第二个 "L")

提前感谢您的帮助!

1) 将 B 列中的每个单元格设置为其对应的 A 列(在 B1 中输入 =A1 并拖动)

2) Select一个范围列B,不要select介于B1和B11之间。在条件格式框中输入此公式

=SUMPRODUCT(--(A1:A10="L"),--(A2:A11="L"))

3) 将格式设置为无背景的白色字体

4) 上下拖动格式以覆盖整列。

这需要额外的列。我为每个步骤添加了一列,这样更容易理解,但您可以合并部分。

公式:

结果:

工作示例: https://1drv.ms/x/s!AiTFgUFVzyzVgZxHPpALDGxkYd6lCA

每列说明:

A. Data
B. Concatenate last 10 rows
C. Length of concatenated value
D. Check if last two values in concatenated value are LL
E. Current row must be equal to L
F. Both conditions must be TRUE
G. Add 10 if TRUE if previous not equal to 0 or reduce by 1
H. Data shown only for rows where previous check is 0

让单元格 B12 有这个公式: =IF(ISERR(SEARCH("LL",TEXTJOIN("",false,A1:A11))),A12,"")

上下拖动复制该公式column B

就个人而言,我尽量避免使用 OFFSET 函数,因为它是易变的,但在这种情况下应该无关紧要,因为 OP 的 objective 是使用 Conditional Formatting.

请注意,Conditional Formatting 无法修改单元格值。

假设数据从A2开始,在B2中输入这个公式并复制到最后一行数据:

使用CONCAT函数:

= IF( ROWS( :2 ) <= 2, T( $A2 ),
 IF( AND( SUM( B1 ) > 0, SUM( B1 ) < 10 ), SUM( 1, B1 ),
 IF( "LL" <> RIGHT( CONCAT( OFFSET( B2, -1, 0,
 - IF( ROWS( 1: ) > 10, 10, ROWS( 1: ) ) ) ), 2 ), T( $A2 ), 1 ) ) )

使用TEXTJOIN函数:

= IF( ROWS( :2 ) <= 2, T( $A2 ),
 IF( AND( SUM( B1 ) > 0, SUM( B1 ) < 10 ), SUM( 1, B1 ),
 IF( "LL" <> RIGHT( TEXTJOIN( "", 1, OFFSET( B2, -1, 0,
 - IF( ROWS( 1: ) > 10, 10, ROWS( 1: ) ) ) ), 2 ), T( $A2 ), 1 ) ) )

上面的公式在找到"LL"组合后生成一个计数器1到10。然后,当满足以下条件时,您应该添加 Conditional Formatting 以将相同的颜色应用于字体和内部:

= ISNUMBER( B2 )

为了显示公式值,字体和内部颜色不同。

OFFSET函数用于设置条件格式要计算的单元格上方10行的范围。 请注意,范围是使用已评估的值而不是原始值生成的(即使用列 B 而不是 A

OFFSET( A2, -1, 1,
 - IF( ROWS( B1:B ) > 10, 10, ROWS( B1:B ) ) )

这部分避免了运行不必要的比较:

IF( ROWS( B1:B ) < 3, T( A2 ), … )

使用T函数避免单元格为空时的zero值:

T( A2 )

这部分启动和终止计数器:

IF( AND( SUM( B1 ) > 0, SUM( B1 ) < 10 ), SUM( 1, B1 ), …

TEXTJOIN 函数连接由 OFFSET 函数生成的范围。

编辑:修改后的公式

您也可以尝试以下无挥发性公式:

使用CONCAT函数:

= IF( ROWS( :2 ) <= 2, T( $A2 ),
 IF( AND( SUM( B1 ) > 0, SUM( B1 ) < 10 ), SUM( 1, B1 ),
 IF( "LL" <> RIGHT( CONCAT( B1  : INDEX( B:B,
 ROW() - IF( -1 + ROWS( :2 ) > 10, 10, -1 + ROWS( :2 ) ) ) ), 2 ), T( $A2 ), 1 ) ) )

使用TEXTJOIN函数:

= IF( ROWS( :2 ) <= 2, T( $A2 ),
 IF( AND( SUM( B1 ) > 0, SUM( B1 ) < 10 ), SUM( 1, B1 ),
 IF( "LL" <> RIGHT( TEXTJOIN( "", 1, B1:INDEX( B:B,
 ROW() - IF( -1 + ROWS( :2 ) > 10, 10, -1 + ROWS( :2 ) ) ) ), 2 ), T( $A2 ), 1 ) ) )

使用CONCATENATE函数:

= IF( ROWS( :2 ) <= 2, T( $A2 ),
 IF( AND( SUM( B1 ) > 0, SUM( B1 ) < 10 ), SUM( 1, B1 ),
 IF( "LL" <> RIGHT( CHOOSE( IF( ROWS( 2: ) > 10, 10, ROWS( 2: ) ),
 CONCATENATE( B, B ),
 CONCATENATE( B, B, B ),
 CONCATENATE( B, B, B, B ),
 CONCATENATE( B, B, B, B, B ),
 CONCATENATE( B, B, B, B, B, B ),
 CONCATENATE( B, B, B, B, B, B, B ),
 CONCATENATE( B, B, B, B, B, B, B, B ),
 CONCATENATE( B, B, B, B, B, B, B, B, B ),
 CONCATENATE( B, B, B, B, B, B, B, B, B, B ),
 CONCATENATE( INDEX(B:B,ROW()-10),
 INDEX(B:B,ROW()-9), INDEX(B:B,ROW()-8), INDEX(B:B,ROW()-7),
 INDEX(B:B,ROW()-6), INDEX(B:B,ROW()-5), INDEX(B:B,ROW()-4),
 INDEX(B:B,ROW()-3), INDEX(B:B,ROW()-2), INDEX(B:B,ROW()-1) ) ), 2 ), T( $A2 ), 1 ) ) )