如何用Google Sheets计算周一平均销售额?遇#DIV/0错误求解
解决周一平均销售额计算的#DIV/0错误问题
问题背景
我有date(日期)和net sales(净销售额)两列数据,目标是计算周一的平均销售额。尝试了以下公式均返回#DIV/0错误:
- 用WEEKDAY生成星期数字作为条件区域:
=AVERAGEIF(WEEKDAY(A2:A),2,B2:B)
- 思路:通过
WEEKDAY(A2:A)将日期转为星期数字,以2(代表周一)为条件,计算对应销售额的平均值
- 将WEEKDAY写入条件参数:
=AVERAGEIF(A2:A,WEEKDAY(A2:A)=2,B2:B)
- 用TEXT函数匹配英文星期名称:
=AVERAGEIF(TEXT(A2:A,"dddd"),"Monday",B2:B)
日期列实际值为mm/dd/yyyy格式,显示格式为<星期>, <月份> <日期>,示例数据如下:
| date | net sales |
|---|---|
| 周六,2月1日 | $963.27 |
| 周日,2月2日 | $1,331.65 |
| 周一,2月3日 | $1,014.70 |
| 周二,2月4日 | $956.89 |
| 周三,2月5日 | $625.13 |
| 周四,2月6日 | $734.03 |
| 周五,2月7日 | $832.71 |
| 周六,2月8日 | $1,534.83 |
| 周日,2月9日 | $974.43 |
| 周一,2月10日 | $904.45 |
| 周二,2月11日 | $746.86 |
| 周三,2月12日 | $596.86 |
| 周四,2月13日 | $671.32 |
| 周五,2月14日 | $880.46 |
| 周六,2月15日 | $1,197.67 |
| 周日,2月16日 | $1,350.67 |
| 周一,2月17日 | $0.00 |
| 周二,2月18日 | $525.15 |
| 周三,2月19日 | $477.58 |
| 周四,2月20日 | $0.00 |
| 周五,2月21日 | $0.00 |
| 周六,2月22日 | $0.00 |
| 周日,2月23日 | $0.00 |
| 周一,2月24日 | $0.00 |
| 周二,2月25日 | $0.00 |
| 周三,2月26日 | $0.00 |
| 周四,2月27日 | $0.00 |
| 周五,2月28日 | $0.00 |
错误原因
AVERAGEIF函数的第一个参数必须是单元格区域引用,不能是WEEKDAY/TEXT这类函数生成的数组结果;同时该函数不支持在条件中直接使用数组表达式,导致所有尝试的公式都无法正确匹配周一的记录,最终因无有效数据参与计算返回#DIV/0错误。
正确解决方案
方案1:Excel 365/2021 推荐写法(支持动态数组)
用FILTER筛选周一数据后计算平均值,语法简洁直观:
=AVERAGE(FILTER(B2:B, WEEKDAY(A2:A, 2)=1))
WEEKDAY(A2:A,2):设置返回值为1=周一、7=周日,避免不同地区星期起始的差异FILTER(B2:B, ...):筛选出所有周一对应的销售额AVERAGE:计算筛选结果的平均值
方案2:兼容所有Excel版本(SUMPRODUCT写法)
通过计算周一销售额总和与周一天数的比值得到平均值:
=SUMPRODUCT((WEEKDAY(A2:A,2)=1)*B2:B)/SUMPRODUCT(--(WEEKDAY(A2:A,2)=1))
- 分子:
(WEEKDAY(A2:A,2)=1)*B2:B:仅保留周一的销售额并求和 - 分母:
--(WEEKDAY(A2:A,2)=1):将布尔值转为1/0,统计周一的天数 - 若需排除0销售额的记录,可修改为:
=SUMPRODUCT((WEEKDAY(A2:A,2)=1)*(B2:B>0)*B2:B)/SUMPRODUCT((WEEKDAY(A2:A,2)=1)*(B2:B>0))
方案3:数组公式写法(旧版Excel需按Ctrl+Shift+Enter)
直接用IF筛选周一数据后计算平均值:
=AVERAGE(IF(WEEKDAY(A2:A,2)=1,B2:B))
- 旧版Excel输入公式后需按
Ctrl+Shift+Enter触发数组计算;新版Excel直接回车即可
验证结果
根据示例数据,周一的销售额为:$1,014.70、$904.45、$0.00、$0.00,平均值为(1014.70+904.45)/4 = 479.7875,上述公式均可得到正确结果。
内容的提问来源于stack exchange,提问作者ceelun
相关产品推荐
相关产品推荐

