如何在Google Sheets中以数组形式获取股票指定周期每日涨跌幅?
在Google Sheets中用数组获取指定周期股票每日涨跌幅
要批量计算指定周期(如过去30天、1年)的股票每日涨跌幅,核心逻辑是**(当日收盘价 - 前一日收盘价) / 前一日收盘价**,结合Google Sheets的数组函数可以一次性生成结果,无需手动下拉公式。
基础实现思路
- 用
GOOGLEFINANCE获取目标周期的收盘价数据 - 利用数组运算,将当日收盘价与前一日收盘价做差值比例计算
- 用函数简化重复调用,同时处理无前置数据的错误情况
1. 过去30天的每日涨跌幅数组
直接用LET函数封装变量,避免重复请求GOOGLEFINANCE,提升公式效率:
=LET( prices, INDEX(GOOGLEFINANCE("NASDAQ:GOOGL", "close", TODAY()-30, TODAY(), "DAILY"),,2), ARRAYFORMULA(IFERROR((OFFSET(prices,1,0)-prices)/prices, "")) )
LET(prices, ...):把提取到的收盘价数组赋值给变量pricesOFFSET(prices,1,0):将收盘价数组整体下移1行,对应"前一日收盘价"ARRAYFORMULA:让公式批量作用于整个数组IFERROR:过滤第一个数据点的错误(无前置收盘价,显示空值)
如果需要同时显示日期+涨跌幅,可以用HSTACK合并结果:
=LET( data, GOOGLEFINANCE("NASDAQ:GOOGL", "close", TODAY()-30, TODAY(), "DAILY"), dates, INDEX(data,2:ROWS(data),1), prices, INDEX(data,2:ROWS(data),2), changes, ARRAYFORMULA(IFERROR((OFFSET(prices,1,0)-prices)/prices, "")), HSTACK(dates, changes) )
这里跳过了GOOGLEFINANCE返回的第一行表头,只提取实际交易数据。
2. 过去1年的每日涨跌幅数组
只需修改时间范围参数,把TODAY()-30替换为TODAY()-365即可:
=LET( prices, INDEX(GOOGLEFINANCE("NASDAQ:GOOGL", "close", TODAY()-365, TODAY(), "DAILY"),,2), ARRAYFORMULA(IFERROR((OFFSET(prices,1,0)-prices)/prices, "")) )
关键说明
- 所有公式均为数组公式,输入后会自动填充整个周期的涨跌幅结果
GOOGLEFINANCE返回的是交易日数据,非交易日(周末、节假日)会自动跳过,无需额外处理- 如果需要固定周期(比如2023全年),可以把
TODAY()-365替换为具体日期,例如DATE(2023,1,1)和DATE(2023,12,31)
内容的提问来源于stack exchange,提问作者vishal
相关产品推荐
相关产品推荐

