ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 3456|回复: 11

[求助] Sumproduct公式的疑问

[复制链接]

TA的精华主题

TA的得分主题

发表于 2018-1-18 15:37 | 显示全部楼层 |阅读模式
本帖最后由 purpurin 于 2018-1-18 15:49 编辑

各位好,我经常使用sumproduct完成多条件求和公式,但是今天遇到一个尝试了多次都不成功,不知道问题出在哪里。

raw data.JPG

如上为原始数据,原始数据中,不是每一列都会有基础金额
我要求和的条件为:1.姓名;2.状态为“已经下单”或者“部分下单”;3.基础金额不为0,4.差额需要大于0
最终求对应人名下差额的和。

原始数据中差额部分我写了IF公式,=IF(D-C<0,0,D-C)
SUMPRODUCT的公式我写的是
=SUMPRODUCT((A1:A50="张三“)*(B1:B50={"已经下单","部分下单"})*(D1:D50<>"")*E1:E50)

返回后有数字,但是金额是不对的。我不确定是不是因为最终求和的部分为有公式的差额导致的?因为行会不断增加,订单金额也有可能调整。所以E列差额必须保持有公式随时计算。有没有什么解决办法?非常感谢

原始数据

原始数据
summary.JPG

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-1-18 15:39 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
最下面俩个图请大家不要看,我怎么也删除不掉。。。就看第一个就好了

TA的精华主题

TA的得分主题

发表于 2018-1-18 15:41 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
我觉得问题应该在中间那个数组上

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-1-18 15:47 | 显示全部楼层
温馨豆 发表于 2018-1-18 15:41
我觉得问题应该在中间那个数组上

因为我常用sumproduct,公式写的也非常多,都没出现任何问题。

我个人觉得问题出在最后求和的差额原始数据上,因为差额部分在原始数据中是有公式的,而且差额>0也是条件之一。但是我不知道怎么解决

TA的精华主题

TA的得分主题

发表于 2018-1-18 15:56 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
purpurin 发表于 2018-1-18 15:47
因为我常用sumproduct,公式写的也非常多,都没出现任何问题。

我个人觉得问题出在最后求和的差额原始 ...

得到什么结果?

TA的精华主题

TA的得分主题

发表于 2018-1-18 15:58 | 显示全部楼层
用这函数还不如用2个sumifs,"已经下单","部分下单"。
或者在sumifs前面套个sum对{"已经下单","部分下单"}这个数组进行求和

TA的精华主题

TA的得分主题

发表于 2018-1-18 16:00 | 显示全部楼层
本帖最后由 温馨豆 于 2018-1-18 16:05 编辑

我看懂了,你最后*E1那里,乘了一个文本,所以是错误值,从第二行开始就阔以了

TA的精华主题

TA的得分主题

发表于 2018-1-18 16:13 | 显示全部楼层
本帖最后由 温馨豆 于 2018-1-18 16:14 编辑

第一个方法,保证E列条件都是数值,第二个方法,把E列的区域单独分出来,这个需要每个区域是一样的大小。
  1. =SUMPRODUCT((A1:A50="张三")*((B1:B50="已经下单")+(B1:B50="部分下单"))*(D1:D50<>""),E1:E50)
复制代码

如果要拖动,该绝对引用的地方,绝对引用

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-1-18 17:19 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
温馨豆 发表于 2018-1-18 16:13
第一个方法,保证E列条件都是数值,第二个方法,把E列的区域单独分出来,这个需要每个区域是一样的大小。
...

谢谢回复,不过我不太理解,E列怎么可能是文本么?在原始数据中我设置了公式才会计算出E列的数值,如果是文本格式的话,公式根本是无法计算的

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-1-18 17:21 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
温馨豆 发表于 2018-1-18 16:13
第一个方法,保证E列条件都是数值,第二个方法,把E列的区域单独分出来,这个需要每个区域是一样的大小。
...

=SUMPRODUCT((A1:A50="张三")*((B1:B50="已经下单")+(B1:B50="部分下单"))*(D1:D50<>""),E1:E50)

另外上面的这个中间的部分,分开+和我列出{}组合加法我都曾经测试过,但是返回结果依然是错误的数据。

返回的结果不是N/A之类的错误标识,而是一个错误的求和值,比如应该返回25,但是返回了35之类的。
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-11-16 02:12 , Processed in 0.047539 second(s), 12 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表