如果您只进行 1 周的计算,那么“逃避”路线将是有一个数据透视表,其中公司作为行,日期作为列。然后过滤您的列,您会在该周获得每个公司的一行。
完整路径意味着查看数组公式 - 您可以像往常一样键入其中一个,但不是按 [Enter],而是按 [Ctrl]+[Shift]+[Enter],公式将显示在大括号中. (这就是为什么它们有时被称为“CSE 公式”,表示“Control、Shift、Enter”)
~警告 - 这是我如何计算最终公式的漫长过程。希望它会有意义!~
数组公式可让您遍历范围内的每一行,分别计算它们,然后在最后将它们全部相加。这给了我们外部术语 - 一切都在 =SUM(..) 中。按[Ctrl]+[Shift]+[Enter],显示为{=SUM(..)}
现在,我们希望每行进行什么计算?好吧,对于 F 列在日期内的每一行,您希望在日期内有 1 个 per 公司。好吧,另一个是说“per”是“除以”(因此“Percentage”符号是“0 / 0”或“%”,而较小的人知道“Permille”符号是“0 / 00”或“‰” )
为了重现性,我将假设您的计数是在单元格 J2 中完成的,并且您在单元格 H2 和 I2 中有开始/结束日期
第 4 行的公式将以 =IF(AND(F4>=$H2,F4<=$I2), 1/???, 0) 开头,其中 ??? 是第 4 行中公司出现的次数。不幸的是,AND 函数不适用于数组公式。 幸运的是有一个简单的解决方法 - 因为布尔 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 加在一起得到一个“平面”数字:=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)(这里的技巧是 Range 参数被视为一次所有单元格,但 Condition 参数被视为每个单元格的数组,一次一个)
现在,有些人可能会争辩说,为了安全起见,您需要将 1/COUNTIFS(B4:B18, B4:B18, F4:F18, ">="&H2, F4:F18, "<="&I2) 放在 IFERROR 中 - 但是,这是在 IF 语句的 TRUE 部分中引用同一行,所以我们知道,如果正在评估 COUNTIF,那么将总是至少有 1 行匹配。
因此,如果我们将它们全部粘贴在一起,并添加大量 $ 符号以将行/列锁定到位(这样您就可以向下拖动列 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]
(两个日期单元格,$H2 和 $I2 是我留下“解锁”的唯一条件,即使那样也只在行上)