Google Sheets 版本的“SERIESSUM”函数接受单元格引用数组作为系数“列表”,如以下示例所示:
=SERIESSUM(O8549,0,1,{K8549,K8538,K8526,K8514,K8502,K8490,K8478,K8466,K8454,K8442,K8430,K8418})
但是,Excel 拒绝接受这一点,显然只接受单元格“范围”或常量列表。有什么方法可以解决这个问题。我在网上搜索了相关信息……我需要将系数放在“K”列和每 12 行中(它们是每 5 分钟获取一次的大气读数,“K”列是过去一小时的移动平均值)——我的系数需要是过去 12 小时的每小时平均值。有人建议创建一个自定义函数,但是它将如何用常量填充 Excel 中的系数列表(我的 VBA 技能非常生疏/缺乏)?BDR
答案1
由于系数的数量固定为 12,因此可以使用CHOOSE
:
=SERIESSUM(
O8549,
0,
1,
CHOOSE(
{1; 2; 3; 4; 5; 6; 7; 8; 9; 10; 11; 12},
K8549,
K8538,
K8526,
K8514,
K8502,
K8490,
K8478,
K8466,
K8454,
K8442,
K8430,
K8418
)
)
答案2
问题是,在 Excel 中,您不能将单元格引用放入带有括号的数组中。
您可以尝试像这样构建系数(适当编辑您的范围):
=CHOOSEROWS($B$1:$B$61,SEQUENCE(ROWS($B$1:$B$61)/12+1,,1,12))
并将它们放入 SERIESSUM 中:
=SERIESSUM(0.6,0,1,CHOOSEROWS($B$1:$B$61,SEQUENCE(ROWS($B$1:$B$61)/12+1,,1,12)))
或者让它更整洁一点:
=LET(
data,$B$1:$B$61,
every,12,
coeffs,CHOOSEROWS(data,SEQUENCE(ROWS(data)/every+1,,1,every)),
SERIESSUM(0.6,0,1,coeffs)
)
编辑-Excel 2013 的可能解决方案
在空列中,使用此公式的变体来获取系数:
=INDEX($B$1:$B$61,IF(ROW()=1,ROW(),(ROW()-1)*12))
根据工作表中数据的位置以及第 n 行的具体要求调整范围和偏移量。
然后将保存系数的范围传递到 SERIESSUM 函数中:
=SERIESSUM(0.6,0,1,D1:D6)