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 ) ) )
我有一个 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 ) ) )