【发布时间】:2017-12-02 04:26:22
【问题描述】:
【问题讨论】:
-
您没有附加电子表格
-
我不能,但我附上了一张图片,应该清楚
标签: excel
【问题讨论】:
标签: excel
你想出的公式看起来是在正确的轨道上,但我会改为:
= 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 和 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 和 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"))
这个公式可以正常工作除非你插入行,然后它可能会搞砸公式,这就是为什么我通常更喜欢在下面做这样的事情。 (它给公式增加了一点,但“更安全”):
= 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 列中的单元格,即使在工作表中插入了行。
【讨论】:
K 实例替换为D(因为D 列是每日最高列)。