目前。当有人在E栏中输入信息(采取行动)时,我会设置它,然后整行将变为黄色,以便很容易看到正在处理该项目。
我设置的另一种条件格式是,在输入F列的日期过后5个工作日(日期操作),该行将变为红色警告用户追查问题试。
每周,用户都会联系列表中有关所列产品的更多供应商,并填写他们采取的行动和采取行动的日期。
我要做的是将所有在一周内联系的供应商(即第1周,05.02.18
添加到09.02.18
)加起来我知道可以通过使用公式来完成;
=COUNTIFS(F4:F18,">=5/2/18",F4:F18,"<=9/2/2018")
但我只想计算每个公司一次!因此,即使在执行日期05.02.18
到09.02.18
, 8 之间,他们也只是联系了 4 供应商。
这可能吗? (仅供参考,所附的截图只是真实文档的快速模型,其中包含数千种产品和更深入的信息)。
答案 0 :(得分:1)
如果您不介意添加几个工作列,以下是可能的解决方案:
设置两个单元格,以包含您在公式=COUNTIFS(F4:F18,">=5/2/18",F4:F18,"<=9/2/2018")
中使用的范围的最小和最大日期。这样您就可以更新日期,而无需每次重新复制公式。我分别使用细胞E1和G1作为最小和最大日期。
在新列中生成符合条件的供应商ID列表。我随意选择了列H.我在H4中放置了以下公式并复制了下来:
=IF(AND(F4>=$E$1,F4<=$G$1),A4,"")
在新列中,生成第一次从列H发生供应商ID的计数列表,并且不计算空格。我随意选择了第一栏。我在I4中放置了以下公式并复制了下来:
=--(AND(COUNTIF($H$4:H4,H4)=1,H4<>""))
取第3步的结果总和。我随意选择在I19中放置以下公式:
=SUM(I4:I18)
答案 1 :(得分:0)
“警察出局”路线,如果您只进行1周的计算,则将有一个数据透视表,公司为行,日期为列。然后过滤您的列,并在那一周每个公司获得一行。
完整路线意味着查看数组公式 - 您可以像正常一样键入其中一个,但不是按[Enter],而是按[Ctrl] + [Shift] + [Enter],等式将以花括号显示。 (这就是为什么它们有时被称为“控制,转移,输入”的“CSE公式”)
〜警告 - 这是我计算最终公式的一个很长的步骤。希望它有意义!〜
数组公式允许您遍历范围中的每一行,单独计算它们,然后在最后将它们全部加在一起。这给了我们外部术语 - 一切都在=SUM(..)
内。按[Ctrl] + [Shift] + [Enter],这将显示为{=SUM(..)}
现在,我们想要每行做什么计算?好吧,对于列F在日期范围内的每一行,您希望在日期内有1 每公司。好吧,另一个是说“per”是“除以”(因此“百分比”符号为“0/0”或“%”,较小的人知道“Permille”符号为“0/00”或“‰” )
为了重复性,我假设您的计数在Cell J2中完成,并且您在单元格H2和I2中有周开始/结束日期
第4行的公式最开始为=IF(AND(F4>=$H2,F4<=$I2), 1/???, 0)
,其中???
是公司第4行出现的次数。不幸的是,AND
函数不适用于Array Formula。 幸运的是有一个简单的解决方法 - 因为布尔值True / False可以被视为二进制1/0,AND运算符与乘法相同。通过双重否定从布尔值转换为二进制是最快的,因此可以将AND(F4>=H2,F4<=I2)
重写为--(F4>=H2)*--(F4<=I2)
,这将适用于数组公式,为我们提供=IF(--(F4>=H2)*--(F4<=I2), 1/???, 0)
现在,在我们确定???
应该是什么之前,我将跳到第18行。我保证会有这种疯狂的方法!按照上面列出的规则,第18行的公式为=IF(--(F18>=H2)*--(F18<=I2), 1/???, 0)
- 相当简单?现在,如果我们想为4到18之间的所有行运行它,我们只需要加入范围。所以,你会得到=IF(--(F4:F18>=H2)*--(F4:F18<=I2), 1/???, 0)
把它变成一个数组公式会得到一个“1 / ???”和“0”的数组,所以把它与SUM
一起加到一起来得到一个'flat'号码:=SUM(IF(--(F4:F18>=H2)*--(F4:F18<=I2), 1/???, 0))
还记得前面提到过的“方法”吗?好吧,如果我们一直在寻找直接的行动计数,忽略唯一公司约束,我们可以使???
= 1,得到=SUM(IF(--(F4:F18>=$H2)*--(F4:F18<=$I2), 1, 0))
并点击[Ctrl] + [Shift] + [Enter ] - 与=COUNTIF(F4:F18, ">="&H2, F4:F18, "<="&I2)
给出相同的结果 - 并且将1
更改为D4:D18
将是产品上的SUMIF
。 (顺便提一下,你可以从CountIf中删除IF语句,因为Condition已经返回1或0)
所以,最后一步!什么是???
嗯,这是一个行数,其中Date Actioned在我们的日期范围内,而Company与当前行相同。因此,对于第4行,您有COUNTIFS(B4:B18, B4, F4:F18, ">="&H2, F4:F18, "<="&I2)
,对于第18行,您获得COUNTIFS(B4:B18, B18, F4:F18, ">="&H2, F4:F18, "<="&I2)
,最终???
变为COUNTIFS(B4:B18, B4:B18, F4:F18, ">="&H2, F4:F18, "<="&I2)
(这里的诀窍是范围参数一次被视为所有单元格,但条件参数被一次一个地视为每个单元格的数组)
现在,有些人可能认为您需要将1/COUNTIFS(B4:B18, B4:B18, F4:F18, ">="&H2, F4:F18, "<="&I2)
放在IFERROR
内才能安全 - 但是,这是TRUE
部分的IF
部分声明引用同一行,因此我们知道如果正在评估COUNTIF
,则总是至少匹配一行。
因此,如果我们将它们全部粘在一起,并添加一堆$
符号来锁定行/列(以便您可以向下拖动列J以计算列H中的不同周/日期和I)你得到(略微笨拙)公式如下:
=SUM(IF(--($F$4:$F$18>=$H2)*--($F$4:$F$18<=$I2), 1/COUNTIFS($B$4:$B$18, $B$4:$B$18, $F$4:$F$18, ">=" & $H2, $F$4:$F$18, "<=" & $I2), 0))
最后一次 - 别忘了按[Ctrl] + [Shift] + [Enter]
(2个日期单元格,$ H2和$ I2是我留下'解锁'的唯一条款,即使只是在行上也是如此)