你能让 google sheet 的 'OR' 提前退出吗?
Can you make google sheet's 'OR' exit early in the event of an early match?
我有一个条件格式,需要大约 23 'OR' 个选项。我怎样才能在其中包含文本的单元格上只 运行 ,然后在找到一个匹配项后立即退出。
这是条件格式代码:
=IF(OR(
AND(REGEXMATCH($F2, "Action"),($K=TRUE)),
AND(REGEXMATCH($F2, "Adventure"),($K=TRUE)),
AND(REGEXMATCH($F2, "Animation"),($K=TRUE)),
AND(REGEXMATCH($F2, "Comedy"),($K=TRUE)),
AND(REGEXMATCH($F2, "Crime"),($K=TRUE)),
AND(REGEXMATCH($F2, "Drama"),($K=TRUE)),
AND(REGEXMATCH($F2, "Family"),($K=TRUE)),
AND(REGEXMATCH($F2, "Fantasy"),($K=TRUE)),
AND(REGEXMATCH($F2, "Historical"),($K=TRUE)),
AND(REGEXMATCH($F2, "Horror"),($K=TRUE)),
AND(REGEXMATCH($F2, "Medical"),($K=TRUE)),
AND(REGEXMATCH($F2, "Musical"),($K=TRUE)),
AND(REGEXMATCH($F2, "Paranormal"),($K=TRUE)),
AND(REGEXMATCH($F2, "Romance"),($K=TRUE)),
AND(REGEXMATCH($F2, "Sci-Fi"),($K=TRUE)),
AND(REGEXMATCH($F2, "Sport"),($K=TRUE)),
AND(REGEXMATCH($F2, "Spy"),($K=TRUE)),
AND(REGEXMATCH($F2, "Superhero"),($K=TRUE)),
AND(REGEXMATCH($F2, "Thriller"),($K=TRUE)),
AND(REGEXMATCH($F2, "War"),($K=TRUE)),
AND(REGEXMATCH($F2, "Western"),($K=TRUE)),
AND(REGEXMATCH($F2, "Zombie"),($K=TRUE))),
1, 0)
因为它 运行 在相当少的单元格上,让它提前退出,或者以某种方式优化,将非常有帮助。感谢您的任何帮助,您可以提供。
我试过在 or 之前加上一个 AND,加上 NOT(ISBLANK(cell)) 的额外条件,但它仍然 运行s OR 检查(因此处理时间长)
编辑:更多信息
Frogglet,请参阅我上面的评论。但是,例如,仅基于我在您的公式中看到的内容并使用一点创意(假设我是正确的,您的公式将“喜剧”和“犯罪”与 $K$6 配对是一个错误,因此从那里开始的一切都是错误的),这里有一个更短的公式可以完成同样的事情:
=IFERROR(IF(INDIRECT("K"&SEARCH(LEFT($F2,3),"XXACTADVANICOMCRIDRAFAMFANHISHORMIDMUSPARROMSCISPOSPYSUPTHRWARWESZOM")/3+2)=TRUE,1,0))
我完全不明白你为什么要使用 REGEXMATCH。
我在这里所做的基本上是从每个流派的前三个字母组成一个长字符串,将其一分为二,前面加上“XX”,这样流派块的每个开头都可以在位置找到可被 3 整除。然后我搜索前三个字母,找到位置,除以三并添加 2 以偏移到您的 Column-K 位置的 TRUE 开始位置。
但在现实生活中,如果我能看到你的sheet,它会更短;因为我们会在单独的 sheet 中设置您的流派列表作为参考,请使用它在 F2 中进行验证,然后使用 INDEX(MATCH()) 与列 K.
进行正确配对
看到你的 sheet 就明白了,Frogglet。
我在您的示例传播sheet 中设置了一个名为“Erik”的新 sheet。我更改了格式,以便您之前在 F:F 中以逗号分隔的列表被分解为列 F:K。这些列使用基于完整流派列表列的数据验证,A.) 使您可以轻松地快速 select 流派,B.) 确保您不会输入任何错误内容。它还使编写 CF 公式变得更加容易。
我现在可以应用于 A2:K 的 CF 自定义公式如下:
=ArrayFormula(($A2<>"")*(COUNTA(IFERROR(FILTER(TRANSPOSE($F2:$K2),MATCH(TRANSPOSE($F2:$K2),FILTER($O:$O,$P:$P=TRUE),0))))>0))
就个人而言,我会把你的流派清单放在自己的 sheet 中。但它按原样工作得很好(只要你只对列 A:K 而不是整行进行排序)。
尝试:
=N(REGEXMATCH(F2, TEXTJOIN("|", 1, FILTER(J:J, K:K=TRUE))))
Frogglet,在阅读您最近的评论后,我想到我之前的简短 CF 公式稍加修改就可以在一栏中处理流派。个人还是觉得六栏更不容易出错,也更容易添加;但如果你想保留设置,你有:
=ArrayFormula(($A2<>"")*(COUNTA(IFERROR(FILTER(TRANSPOSE(TRIM(SPLIT($F2,","))),MATCH(TRANSPOSE(TRIM(SPLIT($F2,","))),FILTER($J:$J,$K:$K=TRUE),0))))>0))
我添加了第二个 sheet,称为“Erik 2”,它实现了这个 CF 公式。
我所做的只是将之前的六列范围替换为单列范围的 TRANSPOSEd SPLIT。
此外,这个公式是“轻”的,所以它可以应用于整个A2:F范围,而不是限制和不断改变CF应用的范围。
我有一个条件格式,需要大约 23 'OR' 个选项。我怎样才能在其中包含文本的单元格上只 运行 ,然后在找到一个匹配项后立即退出。 这是条件格式代码:
=IF(OR(
AND(REGEXMATCH($F2, "Action"),($K=TRUE)),
AND(REGEXMATCH($F2, "Adventure"),($K=TRUE)),
AND(REGEXMATCH($F2, "Animation"),($K=TRUE)),
AND(REGEXMATCH($F2, "Comedy"),($K=TRUE)),
AND(REGEXMATCH($F2, "Crime"),($K=TRUE)),
AND(REGEXMATCH($F2, "Drama"),($K=TRUE)),
AND(REGEXMATCH($F2, "Family"),($K=TRUE)),
AND(REGEXMATCH($F2, "Fantasy"),($K=TRUE)),
AND(REGEXMATCH($F2, "Historical"),($K=TRUE)),
AND(REGEXMATCH($F2, "Horror"),($K=TRUE)),
AND(REGEXMATCH($F2, "Medical"),($K=TRUE)),
AND(REGEXMATCH($F2, "Musical"),($K=TRUE)),
AND(REGEXMATCH($F2, "Paranormal"),($K=TRUE)),
AND(REGEXMATCH($F2, "Romance"),($K=TRUE)),
AND(REGEXMATCH($F2, "Sci-Fi"),($K=TRUE)),
AND(REGEXMATCH($F2, "Sport"),($K=TRUE)),
AND(REGEXMATCH($F2, "Spy"),($K=TRUE)),
AND(REGEXMATCH($F2, "Superhero"),($K=TRUE)),
AND(REGEXMATCH($F2, "Thriller"),($K=TRUE)),
AND(REGEXMATCH($F2, "War"),($K=TRUE)),
AND(REGEXMATCH($F2, "Western"),($K=TRUE)),
AND(REGEXMATCH($F2, "Zombie"),($K=TRUE))),
1, 0)
因为它 运行 在相当少的单元格上,让它提前退出,或者以某种方式优化,将非常有帮助。感谢您的任何帮助,您可以提供。 我试过在 or 之前加上一个 AND,加上 NOT(ISBLANK(cell)) 的额外条件,但它仍然 运行s OR 检查(因此处理时间长)
编辑:更多信息
Frogglet,请参阅我上面的评论。但是,例如,仅基于我在您的公式中看到的内容并使用一点创意(假设我是正确的,您的公式将“喜剧”和“犯罪”与 $K$6 配对是一个错误,因此从那里开始的一切都是错误的),这里有一个更短的公式可以完成同样的事情:
=IFERROR(IF(INDIRECT("K"&SEARCH(LEFT($F2,3),"XXACTADVANICOMCRIDRAFAMFANHISHORMIDMUSPARROMSCISPOSPYSUPTHRWARWESZOM")/3+2)=TRUE,1,0))
我完全不明白你为什么要使用 REGEXMATCH。
我在这里所做的基本上是从每个流派的前三个字母组成一个长字符串,将其一分为二,前面加上“XX”,这样流派块的每个开头都可以在位置找到可被 3 整除。然后我搜索前三个字母,找到位置,除以三并添加 2 以偏移到您的 Column-K 位置的 TRUE 开始位置。
但在现实生活中,如果我能看到你的sheet,它会更短;因为我们会在单独的 sheet 中设置您的流派列表作为参考,请使用它在 F2 中进行验证,然后使用 INDEX(MATCH()) 与列 K.
进行正确配对看到你的 sheet 就明白了,Frogglet。
我在您的示例传播sheet 中设置了一个名为“Erik”的新 sheet。我更改了格式,以便您之前在 F:F 中以逗号分隔的列表被分解为列 F:K。这些列使用基于完整流派列表列的数据验证,A.) 使您可以轻松地快速 select 流派,B.) 确保您不会输入任何错误内容。它还使编写 CF 公式变得更加容易。
我现在可以应用于 A2:K 的 CF 自定义公式如下:
=ArrayFormula(($A2<>"")*(COUNTA(IFERROR(FILTER(TRANSPOSE($F2:$K2),MATCH(TRANSPOSE($F2:$K2),FILTER($O:$O,$P:$P=TRUE),0))))>0))
就个人而言,我会把你的流派清单放在自己的 sheet 中。但它按原样工作得很好(只要你只对列 A:K 而不是整行进行排序)。
尝试:
=N(REGEXMATCH(F2, TEXTJOIN("|", 1, FILTER(J:J, K:K=TRUE))))
Frogglet,在阅读您最近的评论后,我想到我之前的简短 CF 公式稍加修改就可以在一栏中处理流派。个人还是觉得六栏更不容易出错,也更容易添加;但如果你想保留设置,你有:
=ArrayFormula(($A2<>"")*(COUNTA(IFERROR(FILTER(TRANSPOSE(TRIM(SPLIT($F2,","))),MATCH(TRANSPOSE(TRIM(SPLIT($F2,","))),FILTER($J:$J,$K:$K=TRUE),0))))>0))
我添加了第二个 sheet,称为“Erik 2”,它实现了这个 CF 公式。
我所做的只是将之前的六列范围替换为单列范围的 TRANSPOSEd SPLIT。
此外,这个公式是“轻”的,所以它可以应用于整个A2:F范围,而不是限制和不断改变CF应用的范围。