答案 0 :(得分:1)
为什么不使用pivottable并将pivot字段聚合方法更改为High和Low字段的最大值或最小值。
结果
您不必为每个字段加倍Max和Min。我只想表明它是可能的。
答案 1 :(得分:0)
你提出的公式看起来像是在正确的轨道上,但我会改为:
= MAX(IF((MONTH($B$2:$B$100)=J2)*(YEAR($B$2:$B$100)=I2),$C$2:$C$100))
然后根据需要将此公式拖下来。
(同样,为了找到每个月的最低数量,只需将上述等式中的MAX
替换为MIN
。)
请注意,这是一个数组公式,因此您必须在键入此公式后按 Ctrl + Shift + Enter 而不是仅按输入
另请注意,您应将整个数据包含在此公式中,而不仅仅是1月底。在这个例子中,我将其下放到第100行,但您需要根据数据的结束位置进行调整。
或者如果您使用的是数据透视表,@ QHarr的解决方案也可以使用。
修改强>
根据要求,以下是此公式中的内容:
(MONTH($B$2:$B$100)=J2)
和(YEAR($B$2:$B$100)=I2)
都会返回TRUE
&{39}和FALSE
的垂直数组(大小相同)。将它们相乘时,得到的数组为1和0。 (此输出数组的索引将等于1,其中输入数组的相应索引都等于TRUE
。)实际上,您并未将MONTH
和YEAR
相乘。这将毫无意义,因为例如2017年2月你会得到4034的价值,这是毫无意义的。
将两个逻辑阵列相乘的简单示例:{TRUE;TRUE;FALSE}*{TRUE;FALSE;TRUE}
将返回{1;0;0}
。您可能期望它应该返回{TRUE;FALSE;FALSE}
但是当将两个逻辑数组相乘时,它会自动转换为1和0的数组。但是,这不是一个问题,因为IF
语句将处理1和0的数组,就像它处理TRUE
&#数组的方式一样39; s和FALSE
'所以不需要将其转换回逻辑值。
AND
无效的原因是AND
始终返回单个结果(不是数组)。例如,AND({TRUE;TRUE;FALSE},{TRUE;FALSE;TRUE})
只会返回FALSE
。因此,AND
在数组公式中通常不是很有用,因为它不会返回数组哈哈。
至于返回+1,-1或0,取决于它与上个月的比较,这很容易实现。
由于输出位于K
列中,因此我会将其基于此列。
在单元格L2
中,键入公式(并根据需要向下拖动):
= IF(K2>K1,"+1",IF(K2<K1,"-1","0"))
这个公式工作正常除非你插入行,然后它可能会搞砸公式,这就是为什么我通常喜欢在下面做这样的事情。 (它为公式增加了一点,但是更安全&#34;):
= IF(K2>INDEX(K:K,ROW()-1),"+1",IF(K2<INDEX(K:K,ROW()-1),"-1","0"))
您注意到这些公式完全相同,但上述公式中K1
已替换为INDEX(K:K,ROW()-1)
。只输入K1
的问题是,如果在第一行和第二行之间插入一行,则对K1
的引用不会发生变化,即使您希望它实际增加到K2
。这是通过INDEX(K:K,ROW()-1)
解决的,K
始终只引用其正上方float
列中的单元格,即使在表格中插入行也是如此。