作业帮 > 综合 > 作业

=SUMPRODUCT((凭证!D:D="管理费用")*(凭证!E:E="办公费")*(凭证!G:G))我这公式那错?

来源:学生作业帮 编辑:作业帮 分类:综合作业 时间:2024/05/15 05:38:41
=SUMPRODUCT((凭证!D:D="管理费用")*(凭证!E:E="办公费")*(凭证!G:G))我这公式那错?
不知用的EXCEL是什么版本了?如果用的是EXCEL 2003的,这公式会返回 #NUM!的错误值.因为EXCEL 2003中,SUMPRODUCT函数不支持 D:D 这类型的整列引用的形式.只需要把公式中的行指定一下就行了,如从第1行到第999行,则公式改为:
=SUMPRODUCT((凭证!D1:D999="管理费用")*(凭证!E1:E999="办公费")*(凭证!G1:G999))
公式中的最后的(凭证!G1:G999)那个括号其实是多余的,括号可以去掉写作:
=SUMPRODUCT((凭证!D1:D999="管理费用")*(凭证!E1:E999="办公费")*凭证!G1:G999)
如果用的是EXCEL 2003以上的版本,则要看是什么样的错误了,提问中可没说明到底公式返回的是什么样的错误,是求和结果不正确还是返回其它的错误代码了?此公式中要读取名字为 凭证 的工作表,这个工作表一定要存在,否则返回 #REF!错误值.
再问: 谢谢回答!我用的是excel2007,工作表是在2003版本上建立的,但有时在2007版本下操作,有影响吗?错误提示是#VALUE!名为凭证的工作表绝对存在的,谢谢!
再答: 公式中的最后是乘以 凭证!G:G ,估计你的表格是有表头的,表头中使用了中文或英文等文本字符,相乘肯是出错的。且你的工作表是在EXCEL 2003上建立的,在没有经过转换格式的情况下,即使在2007上使用,实际上还是2003的格式。 假设第1行是表头,把公式改为这样避开第一行的表头(此公式这样写法同时兼容EXCEL2003及以上版本): =SUMPRODUCT((凭证!D2:D999="管理费用")*(凭证!E2:E999="办公费")*(凭证!G2:G999)) 其实这对表格的运行速度也是有所提高的,2007开始,有1048576行,其实很多时候根本用不了那么多行,但你的公式用 D:D这样的整列引用形式,每一次运算都是1048576次,我要是指定到999行,那么每次都只是运行999次,你说谁快了? 如果以上公式还是不行的,那么就要检查公式中引用的D、E、G三列是不是本身就存在由其它公式返回的数值,且返回了 #VALUE!错误值。 如果还是要坚持原公式那样的整列引用,把公式改为这样应能正常了,但这是数组公式,输入完成后不能直接回车,要按三键CTRL+SHIFT+回车 结束。 要注意,以下的公式还是必须要在2007中使用。 =SUM((凭证!D:D="管理费用")*(凭证!E:E="办公费")*IF(ISNUMBER(凭证!G:G),凭证!G:G)) 最后提供这条算是终级公式了,应该是绝对能用的了,但不是必须的情况下,实在没必要用这公式,写上来仅供参参考,还是数组公式,按三键 CTRL+SHIFT+回车。 =SUM(IF(ISERROR(凭证!D:D),,凭证!D:D="管理费用")*IF(ISERROR(凭证!E:E),,凭证!E:E="办公费")*IF(ISNUMBER(凭证!G:G),凭证!G:G))