如何改进我的MS Excel公式?

时间:2015-10-19 13:27:11

标签: excel

这是我写的一个代码,用于检查员工连续工作超过5天的轮班 - 这是不允许的。所以写了这个以确保不会发生这种情况。我知道代码有效,但看起来很糟糕,所以我想知道如何改进它?

以下是参数。我只想数73,311,711。这些组合不得超过连续5天而不会间隔。

这是我的代码:

= IF(IF(COUNTIFS(B15:G15, “<>” 中&安培; $ Z $ 21 B15:G15, “<> VL”,B15:G15, “<> LWOP”)大于5,COUNTIFS(B15:G15, “<>” 中&安培; $ Z $ 21 B15:G15, “<> VL”,B15:G15, “<> LWOP”),0)+ IF(COUNTIFS(C15:H15, “<>” 中&安培; $ Z $ 21 C15:H15, “<> VL”,C15:H15, “<> LWOP”)大于5,COUNTIFS( C15:H15, “<>” 中&安培; $ Z $ 21 C15:H15, “<> VL”,C15:H15, “<> LWOP”),0)+ IF(COUNTIFS(D15: I15, “<>” 中&安培; $ Z $ 21 D15:I15, “<> VL”,D15:I15, “<> LWOP”)大于5,COUNTIFS(D15:I15,“&LT ;> “中&安培; $ Z $ 21 D15:I15,” <> VL “D15:I15, ”<> LWOP“),0)+ IF(COUNTIFS(E15:J15,” <&GT ; “&安培; $ Z $ 21 E15:J15,” <> VL”,E15:J15, “<> LWOP”)大于5,COUNTIFS(E15:J15, “<>” 中&安培; $ Z $ 21 E15:J15, “<> VL”,E15:J15, “<> LWOP”),0)+ IF(COUNTIFS(F15:K15, “<>” 中&安培; $ž $ 21 F15:K15, “<> VL”,F15:K15, “<> LWOP”)大于5,COUNTIFS(F15:K15, “<>” 中&安培; $ Z $ 21中,F15: K15, “<> VL”,F15:K15, “<> LWOP”),0)+ IF(COUNTIFS(G15:L15, “<>” 中&安培; $ Z $ 21 G15:L15, “<> VL”,G15:L15, “<> LWOP”)大于5,COUNTIFS(G15:L15, “<>” 中&安培; $ Z $ 21 G15:L15, “<> VL”,G15:L15, “<> LWOP”),0)+ IF(COUNTIFS(H15:M15,“&LT ;> “中&安培; $ Z $ 21 H15:M15,” <> VL”,H15:M15, “<> LWOP”)大于5,COUNTIFS(H15:M15, “<>” 中&安培; $ Z $ 21 H15:M15, “<> VL”,H15:M15, “<> LWOP”),0)+ IF(COUNTIFS(I15:N15, “<>” 中&安培; $ Z $ 21 I15:N15, “<> VL”,I15:N15, “<> LWOP”)大于5,COUNTIFS(I15:N15, “<>” 中&安培; $ Z $ 21 I15:N15, “<> VL”,I15:N15, “<> LWOP”),0)+ IF(COUNTIFS(J15:O15, “<>” 中&安培; $ Z $ 21 J15: O15, “<> VL”,J15:O15, “<> LWOP”)大于5,COUNTIFS(J15:O15, “<>” 中&安培; $ Z $ 21 J15:O15,“&LT ;> VL “J15:O15, ”<> LWOP“),0)+ IF(COUNTIFS(K15:P15, ”<>“ 中&安培; $ Z $ 21 K15:P15,” <&GT ; VL”,K15:P15, “<> LWOP”)大于5,COUNTIFS(K15:P15, “<>” 中&安培; $ Z $ 21 K15:P15, “<> VL”, K15:P15, “<> LWOP”),0)+ IF(COUNTIFS(L15:Q15, “<>” 中&安培; $ Z $ 21 L15:Q15, “<> VL”,L15: Q15,“<> LWOP”,L15:Q15,“<>”&“”)> 5,COUNTIFS(L15:Q15,“<>”& $ Z $ 21,L15:Q15 , “<> VL”,L15:Q15, “<> LWOP”,L15:Q15, “<>” 中&安培; “”),0)> 0,“错误”,“”)

enter image description here

2 个答案:

答案 0 :(得分:1)

如果员工1的工作时间超过连续五天,则此公式将为TRUE:

=6>MAX(FREQUENCY(IF(ISNUMBER(B15:P15),COLUMN(B15:P15)),IF(NOT(ISNUMBER(B15:P15)),COLUMN(B15:P15))))
  

这是一个数组公式,必须使用 Ctrl + Shift + Enter 确认。

无需辅助细胞。

这可以通过假设职责代码是数字,而其他所有代码都不是。

答案 1 :(得分:0)

将其分解为两个步骤。制作一堆表示:

的单元格
B16=COUNTIFS(B15:G15,"<>"&$Z$21,B15:G15,"<>VL",B15:G15,"<>LWOP"
C16=COUNTIFS(C15:H15,"<>"&$Z$21,C15:H15,"<>VL",C15:H15,"<>LWOP"
D16=COUNTIFS(D15:I15,"<>"&$Z$21,D15:I15,"<>VL",D15:I15,"<>LWOP"
E16=COUNTIFS(E15:J15,"<>"&$Z$21,E15:J15,"<>VL",E15:J15,"<>LWOP"
F16=COUNTIFS(F15:K15,"<>"&$Z$21,F15:K15,"<>VL",F15:K15,"<>LWOP"
...
L16=COUNTIFS(L15:Q15,"<>"&$Z$21,L15:Q15,"<>VL",L15:Q15,"<>LWOP",L15:Q15,"<>"&" "

然后将它们组合起来:

=IF((B16>5,B16,0)
 +IF(C16>5,C16,0)
 +IF(D16>5,D16,0)
 +IF(E16>5,E16,0)
 ..
 +IF(L16>5,L16,0)>0,"Error","")