Excel中如何对月度成交率平均值求平均并排除无数据月份
Excel中如何对月度成交率平均值求平均并排除无数据月份
兄弟,我太懂你这种刚做销售想盯紧自己数据的心情了!你的公式思路方向是对的,但就是栽在无数据月份的干扰上——那些还没产生线索的月份要么算出0要么出错误值,直接拉低了整体平均。给你几个实用的解决方案,按需选就行:
方案1:优化你现有的LET公式(兼容旧版Excel)
核心思路是:把无数据月份的计算结果改成NA()(Excel的“无效值”),而AVERAGE函数会自动忽略NA()值,这样就不会把空月份算进去了。同时我还帮你简化了FILTER里的多余IF判断,原来的IF(MONTH(ApptDate)=m,B8:B500,0)完全没必要,直接用MONTH(ApptDate)=m当筛选条件就行。
修改后的完整公式:
=LET( janClosing, IFERROR(SUMPRODUCT((MONTH(CloseDate)=1)*(CloseDate<>""))/COUNTA(FILTER(B8:B500,MONTH(ApptDate)=1)), NA()), febClosing, IFERROR(SUMPRODUCT((MONTH(CloseDate)=2)*(CloseDate<>""))/COUNTA(FILTER(B8:B500,MONTH(ApptDate)=2)), NA()), marClosing, IFERROR(SUMPRODUCT((MONTH(CloseDate)=3)*(CloseDate<>""))/COUNTA(FILTER(B8:B500,MONTH(ApptDate)=3)), NA()), aprClosing, IFERROR(SUMPRODUCT((MONTH(CloseDate)=4)*(CloseDate<>""))/COUNTA(FILTER(B8:B500,MONTH(ApptDate)=4)), NA()), mayClosing, IFERROR(SUMPRODUCT((MONTH(CloseDate)=5)*(CloseDate<>""))/COUNTA(FILTER(B8:B500,MONTH(ApptDate)=5)), NA()), junClosing, IFERROR(SUMPRODUCT((MONTH(CloseDate)=6)*(CloseDate<>""))/COUNTA(FILTER(B8:B500,MONTH(ApptDate)=6)), NA()), julClosing, IFERROR(SUMPRODUCT((MONTH(CloseDate)=7)*(CloseDate<>""))/COUNTA(FILTER(B8:B500,MONTH(ApptDate)=7)), NA()), augClosing, IFERROR(SUMPRODUCT((MONTH(CloseDate)=8)*(CloseDate<>""))/COUNTA(FILTER(B8:B500,MONTH(ApptDate)=8)), NA()), septClosing, IFERROR(SUMPRODUCT((MONTH(CloseDate)=9)*(CloseDate<>""))/COUNTA(FILTER(B8:B500,MONTH(ApptDate)=9)), NA()), octClosing, IFERROR(SUMPRODUCT((MONTH(CloseDate)=10)*(CloseDate<>""))/COUNTA(FILTER(B8:B500,MONTH(ApptDate)=10)), NA()), novClosing, IFERROR(SUMPRODUCT((MONTH(CloseDate)=11)*(CloseDate<>""))/COUNTA(FILTER(B8:B500,MONTH(ApptDate)=11)), NA()), decClosing, IFERROR(SUMPRODUCT((MONTH(CloseDate)=12)*(CloseDate<>""))/COUNTA(FILTER(B8:B500,MONTH(ApptDate)=12)), NA()), AVERAGE(janClosing,febClosing,marClosing,aprClosing,mayClosing,junClosing,julClosing,augClosing,septClosing,octClosing,novClosing,decClosing) )
方案2:动态数组简洁版(适合Excel 365/2021)
如果你的Excel是365或2021版本,用这个公式更省心——不用手动写12个月的变量,自动遍历1-12月计算成交率,同样排除无数据月份:
=LET( months, SEQUENCE(12), monthly_rate, BYROW(months, LAMBDA(m, IFERROR( SUMPRODUCT((MONTH(CloseDate)=m)*(CloseDate<>""))/COUNTA(FILTER(B8:B500,MONTH(ApptDate)=m)), NA() ) )), AVERAGE(monthly_rate) )
公式拆解:
SEQUENCE(12):自动生成1到12的月份数组BYROW(months, LAMBDA(m,...)):逐个遍历每个月份m,计算当月成交率IFERROR(..., NA()):把无数据月份的错误/无效值转成NA(),让AVERAGE自动忽略- 最后
AVERAGE(monthly_rate):只算有数据月份的成交率平均值
方案3:单独列月度成交率(兼顾记录需求)
你提到“可能单独记录每个月的成交率也不错”,这个方法最直观,还方便排查每个月的数据:
- 在表格空白处列1-12月,比如C1:C12分别输入
1到12(代表月份) - 在D1单元格输入1月成交率公式,下拉到D12:
=IFERROR(SUMPRODUCT((MONTH(CloseDate)=C1)*(CloseDate<>""))/COUNTA(FILTER(B8:B500,MONTH(ApptDate)=C1)), "") - 最后在任意单元格用
=AVERAGE(D1:D12)计算平均——AVERAGE会自动忽略空单元格,完美排除无数据的月份!
额外小贴士
- 确保
CloseDate和ApptDate这两个命名区域的范围和B8:B500完全一致,不然会出现引用错误 - 如果你的新线索判断是“只要有预约日期就算新线索”,可以把
COUNTA(FILTER(B8:B500,MONTH(ApptDate)=m))改成COUNTIFS(ApptDate,">="&DATE(YEAR(TODAY()),m,1),ApptDate,"<="&EOMONTH(DATE(YEAR(TODAY()),m,1),0)),这样不用依赖B列的标记,直接从预约日期统计新线索数,更准确!




