Excel-从给定月份的随机最后日期获取值

时间:2016-05-29 21:55:16

标签: excel excel-formula

我正在研究大约400家公司的股票每日市值数据。每家公司的数据范围从2000年到2016年。但是,我想在6月的最后一个日期和12月的最后一天选择市值。此外,这些最后日期并不总是意味着月末日期。例如;去年12月,有一家公司在12月14日上市。

再次总结一下我的问题,我想选择6月份的最后一个“可用”市值和从2000年到2016年12月份的最后一个市值。

请帮助我,或者指导我解决这个问题。由于可用值的最后日期并不意味着月末值,我想我不能使用月末公式。查找功能看起来也不可行。

我再次感谢您提供的任何建议。提前谢谢。

样本数据

Date   - Closing - Market Capitalization  
2-Jan  - 23.5    - 177,282,000    
1-Jan  - 22      - 177,282,000    
31-Dec - 33      - 177,282,000    
30-Dec - 33      - 177,282,000    
4-Jul  - 31      - 120,960,000  
2-Jul  - 31.1    - 113,400,000  
1-Jul  - 31      - 113,400,000  
28-Jun - 30      - 113,400,000  
27-Jun - 30      - 113,400,000  
26-Jun - 30.1    - 113,400,000 

Data picture

2 个答案:

答案 0 :(得分:1)

潜在的解决方案。我有一个小小的警告,我将在最后得到它。

让我们在E栏中的一天生成一个我们想要搜索的目标日期列表。它们将是6月和12月的结束日期。每行将前一个日期提前6个月。

在E2中,我们将播种日期放在:

=EOMONTH(DATE(2000,6,1),0)

在E3中,我们将列表生成器放入如下,并根据需要进行复制:

=EOMONTH(E2,6)

在G2中,我们使用以下公式并根据需要进行复制:

=IFERROR(INDEX($C$2:$C$11,AGGREGATE(15,6,ROW($A$2:$A$11)/((MONTH($A$2:$A$11)=MONTH(E2))*(YEAR($A$2:$A$11)=YEAR(E2))),1)-1),"NOT FOUND")

需要注意的是,市值必须至少在6月或12月发生。在这几个月之外不会被关注。

如果您想显示您所提取的数字对应的日期,因为它实际上不是该月的最后一天,您可以将该日期放在F栏中:

=IFERROR(INDEX($A$2:$A$11,AGGREGATE(15,6,ROW($A$2:$A$11)/((MONTH($A$2:$A$11)=MONTH(E2))*(YEAR($A$2:$A$11)=YEAR(E2))),1)-1),"NOT FOUND")

概念证明

Proof of Concept

答案 1 :(得分:1)

您可以使用此数组公式:

=INDEX($C$2:$C$11,MATCH(TRUE,(MIN(IF($A$2:$A$11<=EOMONTH(E6,0),EOMONTH(E6,0)-$A$2:$A$11))=IF($A$2:$A$11<=EOMONTH(E6,0),EOMONTH(E6,0)-$A$2:$A$11)),0))

作为数组公式,必须使用Ctrl-Shift-Enter确认。如果正确完成,那么excel会将{}放在公式周围。

enter image description here

如果您能够按升序对日期进行排序,那么您可以使用此非数组公式:

=INDEX($C$2:$C$11,MATCH(EOMONTH(E6,0),$A$2:$A$11,1))

enter image description here