If statement 如何使用括号或根据所述逻辑完成复杂的单元规则

If statement 如何使用括号或根据所述逻辑完成复杂的单元规则,if-statement,google-sheets,sum,cell,If Statement,Google Sheets,Sum,Cell,设置: 逻辑: 如果一个人工作6天,他需要休息2天,否则单元格O3=1 如果未违反规则,则单元格O3为空 每天最多31天 这6天必须是连续的,然后是连续的2天 重点是检查所有26个可能的“块”单元 到目前为止,我得到了这个: =IF( OR( IF( AND( SUM(B3:G3)=6; SUM(H3:I3)=0); SUM(C3:H3)=6; SUM(I3:J3)=0) ); 1; ); 0; 1;) 想法?这个答案需要对您的数据稍作更改,但似乎有效。它需要用零替换空白单元(非工作日)

设置:

逻辑:

  • 如果一个人工作6天,他需要休息2天,否则单元格O3=1
  • 如果未违反规则,则单元格O3为空
  • 每天最多31天
  • 这6天必须是连续的,然后是连续的2天
  • 重点是检查所有26个可能的“块”单元
到目前为止,我得到了这个:

=IF( OR( IF( AND( SUM(B3:G3)=6; SUM(H3:I3)=0); SUM(C3:H3)=6; SUM(I3:J3)=0) ); 1; ); 0; 1;)

想法?

这个答案需要对您的数据稍作更改,但似乎有效。它需要用零替换空白单元(非工作日)。联接将创建单个字符串(“11111 001111110111111011111100”)。然后在字符串中搜索“111111 01”的出现。它统计这些事件。如果计数为零,则为空,否则为“违规”

=if((LEN(join("",B3:AF3))-LEN(SUBSTITUTE(join("",B3:AF3),"11111101",)))/LEN("11111101")=0,"","Violation")
把公式抄下来

@迈克尔说得很有道理。我在上面的公式中添加了一个OR,用于处理这两种情况。一行中7个或7个以上的1:

=if(or((LEN(join("",B3:AF3))-LEN(SUBSTITUTE(join("",B3:AF3),"1111111",)))/LEN("1111111")>=1,LEN(join("",B3:AF3))-LEN(SUBSTITUTE(join("",B3:AF3),"11111101",)))/LEN("11111101")=0,"","Violation")

这个答案需要对您的数据稍作更改,但似乎有效。它需要用零替换空白单元(非工作日)。联接将创建单个字符串(“11111 001111110111111011111100”)。然后在字符串中搜索“111111 01”的出现。它统计这些事件。如果计数为零,则为空,否则为“违规”

=if((LEN(join("",B3:AF3))-LEN(SUBSTITUTE(join("",B3:AF3),"11111101",)))/LEN("11111101")=0,"","Violation")
把公式抄下来

@迈克尔说得很有道理。我在上面的公式中添加了一个OR,用于处理这两种情况。一行中7个或7个以上的1:

=if(or((LEN(join("",B3:AF3))-LEN(SUBSTITUTE(join("",B3:AF3),"1111111",)))/LEN("1111111")>=1,LEN(join("",B3:AF3))-LEN(SUBSTITUTE(join("",B3:AF3),"11111101",)))/LEN("11111101")=0,"","Violation")

你需要更好地解释你的规则。在你看来,12天是最长的吗?这六天必须连续吗?这两个休息日必须连续吗?规则是什么?@EdNelson不,天数最多31天。是的,6天必须是连续的,接下来的2天也必须是连续的。关键是要检查所有的可能性“块”,你需要更好地解释你的规则。在你看来,12天是最长的吗?这六天必须连续吗?这两个休息日必须连续吗?规则是什么?@EdNelson不,天数最多31天。是的,6天必须是连续的,接下来的2天也必须是连续的。重点是检查我看到的所有可能性的“块”。这是个好主意!问题是这些“1”是通过arayformula生成的,我不知道如何生成这些“0”。我使用的字符串是
=arrayformula(if((B2:AF2)=1;;if(B2:AF2=“”;);(iferror(if(search(“5:00”;B2:AF2);1);iferror(if(search(“13:45”;B2:AF2);1);)
,如果这些单元格中的值是5:00或13:45,则生成“1”,否则单元格为空。有没有办法把那些“0”从我的数组公式中去掉?我想你需要做的就是把第二个if改为if(B2:AF2=“”;0;。但是我发现您的公式有一个解析错误。如果这不起作用,您可以共享您的电子表格吗?我认为如果有人工作超过6天,然后休息2天,或者他们在期末工作了7天,则此解决方案无法识别违规情况。它还应该检查是否存在任何7个1的字符串。@EdNelson It for me li非常感谢你的帮助:)@Michael你说得对。但我意外地得到了另一个字符串的覆盖:一个字符串覆盖了另一个字符串的覆盖:若(或)(或(SUM(DD8:DD8:DD8:d8:d8:d8:d8:DL8:d8:DL8=7;另一个字符串覆盖了它:<代码>=7;若(或(或(或(或)(或(或)(或(SUM)(SUM(DD8:d8:ddd8:dddddd8:ddddd8:ddd8:ddddd8:dddddddd8:d8:ddd8)=)==8)==7);su8)=7);su8)7;su8)7;su8;su8;su8;su8;su8:DE8;su8:d8:d8:d8;su8:d8:d8:d8:d8:d8=7;su8;su8;su8;7;总和(DU8:EA8)=7;SUM(DV8:EB8)=7;SUM(DW8:EC8)=7;SUM(DX8:ED8)=7;SUM(DX8:EF8)=7;SUM(EA8:EG8)=7;SUM(EB8:EH8)=7);1;)如果有违规,它会点亮相同的警报“按钮”。这是个好主意!这些“1”是通过arayformula生成的,我不知道如何生成这些“0”。我使用的字符串是
=arrayformula(if((B2:AF2)=1;;if(B2:AF2=“”;);(iferror(if(search(“5:00”;B2:AF2);1);iferror(if(search(“13:45”;B2:AF2);1);)
如果这些单元格中的值是5:00或13:45,则生成“1”,否则单元格为空。有方法获取这些“0”吗在我的数组公式之外?我认为您需要做的就是将第二个if更改为if(B2:AF2=“”;0;。但是我发现您的公式有一个解析错误。如果这不起作用,您可以共享您的电子表格吗?我认为如果有人工作超过6天,然后休息2天,或者他们在期末工作了7天,则此解决方案无法识别违规情况。它还应该检查是否存在任何7个1的字符串。@EdNelson It for me li非常感谢你的帮助:@Michael你说得很好。但我不小心用另一个字符串把它括起来了:
=IF(或(SUM(DD8:DJ8)=7;SUM(DE8:DK8)=7;SUM(DF8:DL8)=7;SUM(DG8:DM8)=7;SUM(d8:d8)=7;SUM(d8:DQ8)=7;SUM(d8:DR8)=7;SUM(DM8:d8:d8)=7;SUM(d8:DO8)=7);SUM(d8:DU8)=7(DP8:DV8)=7;SUM(DQ8:DW8)=7;SUM(DR8:DX8)=7;SUM(DS8:DY8)=7;SUM(DU8:EA8)=7;SUM(DV8:EB8)=7;SUM(DW8:EC8)=7;SUM(DX8:ED8)=7;SUM(DZ8:EF8)=7;SUM(EA8:EG8)=7;SUM(EB8:EH8)=7);1;
如果出现违规,将点亮相同的警报“按钮”