每月从Excel数据集中提取高点和低点

时间:2017-11-24 15:42:19

标签: excel

我试图通过几年内Excel中股票价格的每日高,低,收盘数据来提取每个月的高点和低点。我该怎么做呢,我附上了一张显示我尝试的电子表格图片。

enter image description here

2 个答案:

答案 0 :(得分:1)

为什么不使用pivottable并将pivot字段聚合方法更改为High和Low字段的最大值或最小值。

以下是添加字段的示例图像(原谅使用Mac!) Image of adding fields

结果

Example resultant fields

您不必为每个字段加倍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。)实际上,您并未将MONTHYEAR相乘。这将毫无意义,因为例如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列中的单元格,即使在表格中插入行也是如此。