You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何计算Excel中A列日期为过去30天的B列数值标准差

如何计算Excel中A列日期为过去30天的B列数值标准差

嘿,我完全懂你的困扰——用SUMIFS做条件求和顺风顺水,但到了标准差这里,直接套条件就卡壳了对吧?其实你一开始想到用FILTER的思路是对的,只是条件的写法需要调整下,我给你拆解两种场景的解决方案:

如果你用的是Excel 365/2021(支持动态数组函数)

直接用FILTER搭配STDEV就可以搞定,公式如下:

=STDEV.S(FILTER(B:B, A:A>TODAY()-30))

我给你拆解下每个部分的作用:

  • TODAY()-30:自动算出当前日期往前推30天的日期,作为筛选的时间阈值;
  • A:A>TODAY()-30:这是核心的筛选条件,Excel会逐行判断A列的日期是否在过去30天内(也就是晚于30天前的日期);
  • FILTER(B:B, ...):把满足条件的B列数值全部提取出来,形成一个动态的数值列表;
  • STDEV.S:计算这个筛选后列表的样本标准差,如果你需要计算总体标准差,换成STDEV.P就行。

要是担心没有符合条件的数据时出现#CALC!错误,可以加个错误处理:

=IFERROR(STDEV.S(FILTER(B:B, A:A>TODAY()-30)), "")

这样没有数据时会返回空值,你也可以把""换成0,根据自己的需求调整。

如果你用的是Excel 2019及更早版本(不支持动态数组)

这时候FILTER用不了,得用数组公式来实现,输入完公式后需要按Ctrl+Shift+Enter确认(注意不是单纯按回车):

=STDEV.S(IF(A:A>TODAY()-30, B:B, ""))

这个公式的逻辑是:逐行检查A列日期是否符合条件,符合的就取对应B列的值,不符合的留空,最后STDEV.S会自动忽略空值,计算有效数值的标准差。

另外提一句你之前试的A&">today()-30"这种写法为啥不行——FILTER需要的是逻辑判断结果(真/假),而不是文本形式的条件字符串,直接写A:A>TODAY()-30这种对比表达式就可以让Excel正确识别啦。

备注:内容来源于stack exchange,提问作者MichaelB

火山引擎 最新活动