在Google Sheets中如何用GoogleFinance获取股票区间最高价及对应日期?
嘿,我来帮你搞定这个Google Sheets的公式问题!你的原公式之所以只返回起始日的最高价,是因为你没充分利用GoogleFinance返回的完整数据数组——让我给你拆解一下,再给出几种解决方案:
为什么原公式只返回起始日数据?
当你给GoogleFinance指定日期范围(A7到B7)时,它会返回一个二维数组:第一行是表头(Date和High),从第二行开始,每行对应一个日期的最高价数据。你的原公式=INDEX(GoogleFinance(C7,"high", A7,B7,"DAILY"),2,2)直接定位到了第二行(第一个数据行)的第二列(最高价列),自然只拿到了起始日的数值。
方案1:单独获取区间内的最高价
要拿到整个日期范围的最高价,我们需要先提取所有日期对应的最高价(跳过表头),再取最大值。可以用QUERY配合MAX实现:
=MAX(QUERY(GoogleFinance(C7,"high",A7,B7,"DAILY"),"SELECT Col2 OFFSET 1"))
QUERY(..., "SELECT Col2 OFFSET 1"):从返回的数组中筛选出第二列(最高价),并跳过第一行的表头。MAX():对筛选出的所有最高价取最大值。
方案2:单独获取最高价对应的日期
要找到这个最高价对应的日期,我们需要筛选出最高价所在行的日期列:
=INDEX( QUERY(GoogleFinance(C7,"high",A7,B7,"DAILY"), "SELECT Col1 WHERE Col2 = "&MAX(QUERY(GoogleFinance(C7,"high",A7,B7,"DAILY"),"SELECT Col2 OFFSET 1"))&" OFFSET 1", 0), 1,1 )
这里先通过嵌套的QUERY+MAX拿到区间最高价,再在外层QUERY中筛选出对应日期,最后用INDEX取第一个匹配结果(如果有多个日期的最高价相同,会返回最早出现的那个)。
方案3:用LET函数一次性返回日期+最高价(推荐)
重复调用GoogleFinance会降低表格运行效率,用LET定义变量存储完整的股票数据,就能一次性计算出结果:
=LET( stock_data, GoogleFinance(C7,"high",A7,B7,"DAILY"), price_list, QUERY(stock_data, "SELECT Col2 OFFSET 1"), max_high, MAX(price_list), max_date, INDEX(QUERY(stock_data, "SELECT Col1 WHERE Col2 = "&max_high&" OFFSET 1"),1,1), {max_date, max_high} )
这个公式会返回两个相邻单元格:左边是最高价对应的日期,右边是区间内的最高价。
小提示
- 如果区间内有多个日期的最高价相同,上述公式会返回最早出现的日期;如果需要返回所有匹配日期,去掉
INDEX(...,1,1),直接保留QUERY部分即可。 - 确保A7和B7的日期格式是Google Sheets可识别的(比如
YYYY-MM-DD格式),避免公式出错。
内容的提问来源于stack exchange,提问作者Jeff Chen




