所以我有一个以1分钟为增量从股票图表转换而来的数据集,我想从数据集中提取关键数据点。
屏幕截图
我遇到的问题是,当我试图使用INDEX函数来匹配MAXIF和MINIF结果时,时间标准没有遵循:从该数据集中提取日内低点的第一个函数:
=最小值(E:E,B:B,">09:30",B:B;"<16:00"(
我试图提取的第二个函数是:
=索引(B:B,MATCH(最小值(E:E,B:B,">09:30",B:B;"<16:00"(,E:E(0((
我得到的结果是8:52AM,这超出了我设定的时间标准。看起来,该函数似乎提取了与MINIF函数结果匹配的第一个实例,完全忽略了时间标准。
因此,我还想记住,我想使用一个不依赖于搜索单个单元格的函数,因为我希望最终目标是自动化数据提取过程,将所有重要的数据点导出到一个新的excel表中,并在数百到数千个数据集的过程中执行此操作。
理想情况下,我希望有一个函数,可以引用第一次提取的确切数据点,从同一行提取其他重要数据,避免因为它在其他地方重复而引用错误的数据点。
尝试以下数组公式,需要用CONTROL+SHIFT+ENTER确认。。。
=INDEX(B2:B10,MATCH(SMALL(IF(B2:B10>"09:30"+0,IF(B2:B10<"16:00"+0,E2:E10)),1),IF(B2:B10>"09:30"+0,IF(B2:B10<"16:00"+0,E2:E10)),0))
并相应地调整范围。不过,为了提高效率,我建议您避免整列引用。
如果范围随着时间的推移而增长,请考虑将数据转换为表。引用将随着行的添加或删除而自动调整。
请注意,+0
已添加到时间中。这是为了将字符串值强制转换为真实的时间值。
编辑
由于看起来您不想将数据转换为表,因此这里有一种使用已定义名称的替代方法。在这里,范围也将随着行的添加/删除而自动调整。请注意,它使用列B来确定最后一行。
首先,定义以下名称(相应地更改图纸名称(。。。
Name: LastRow
Refers to: =MATCH(9.99999999999999E+307,'Sheet 1'!$B:$B,1)
Name: TimeColumn
Refers to: ='Sheet 1'!$B$2:INDEX('Sheet 1'!$B:$B,LastRow)
Name: LowColumn
Refers to: ='Sheet 1'!$E$2:INDEX('Sheet 1'!$E:$E,LastRow)
然后尝试以下公式,需要用CONTROL+SHIFT+ENTER确认。。。
=INDEX(TimeColumn,MATCH(SMALL(IF(TimeColumn>"09:30"+0,IF(TimeColumn<"16:00"+0,LowColumn)),1),IF(TimeColumn>"09:30"+0,IF(TimeColumn<"16:00"+0,LowColumn)),0))