再一次提出EXCEL函数老问题(多条件求和)

来源:百度知道 编辑:UC知道 时间:2024/05/15 17:59:00
表题:中餐厅本月每日进货分类表

(表1)
中餐
分类码 分类 1日 2日 3日 4日
0109 调味类 =
0110 干货类 =
0113 咖啡奶制品 =
0114 粮油类 =
0115 茶叶类 =
0201 白酒类 =
0202 红酒类 =
0203 啤酒类 =
0204 饮料类 =
0205 水类 =
0206 黄酒类 =
0401 文具类 =
0402 印刷品类 =
0501 清洁用品类 =
0502 清洁用具类 =
0804 客房用品 =
0907 其它餐具类

要求:1从进货表中取出包含中餐每日分类的数据金额
要求:2取出的数据要同时满足中餐、当日金额、大分类码
要求:3由于每日进货的物品编码是6位数至10位数之间,故只取前四位是分类的就可以
要求:4由于每日进货的部门比较多(中餐、西餐、酒吧等),中餐、西餐又分出用品仓、酒水仓、食品仓等,故要在取数只要是包含中餐字样的数值就可以
要求:5由于每日进货比较多,每月进货明细的行数都在15000行左右,故处理数据时要函数尽可能精简,不然EXCEL容易死掉或者说处理很慢。

表2进货

选择(SelCol) 进货日期 进货单号 进货部门 采购类型(cPTName) 入库类别(cRdName) 存货名称(cInvName) 存货编码(cInvCode) 规格(cInvStd) 单位(cInvM_Unit) 单价(iUnitCost) 数量(iQuantity) 金额(iPrice)
2009-12-1 0000267109 食品仓-中餐分仓 一般采购 一般采购入库 广东菜心 01010052 斤 2.5 6 15
2009-12-1 0000267109 食品仓-中餐分仓 一般采购 一般采购入库 土豆 01010004 斤 0.9 20 18
200

一.用函数:
C2(一日之下的单元格)公式如下(2为进货表):
=SUMPRODUCT((LEFT('2'!$G$2:$G$20000,4)=$A2)*(DAY('2'!$A$2:$A$20000)=COLUMN(A1))*ISNUMBER(FIND("中餐",'2'!$C$2:$C$20000))*'2'!$L$2:$L$20000)
---------此种方式测试通过,但运行极慢,不建议

二.数据透视表
1.在进货表增加3列:M(进货部门分类)N(进货分类码)O(进货分类名称)
M2=IF(ISNUMBER(FIND("中餐",C2)),"中餐",IF(ISNUMBER(FIND("西餐",C2)),"西餐",IF(ISNUMBER(FIND("酒吧",C2)),"酒吧","其他")))
N2=LEFT(G2,4)
O2=VLOOKUP(N2,'1'!A:B,2,0) 根据分类码查找名称,视情况更改。
M2/N2/O2的公式向下复制。

2.数据透视表
2.1.菜单路径:数据-数据透视表-完成,系统自动生成透视表空白模板。
2.2 透视表操作
将“进货部门分类”拖到模板的“页”字段 (在模板最上面),或”行字段“
将“进货分类码”和“进货分类名称”拖到模板的“行”字段
将“日期”拖到模板的“列”字段
将“金额”拖到模板的“数据区”
---------此种方式测试通过,运行良好

对于你的补充问题,有一点必须说一下:做数据透视表速度快,但是每次有更新时,你得更新数据透视表喔。
一劳永逸的方法还是函数公式。你可以在工具选项里将自动重算改为手动重算,所有数据输入完成后按f9

也可以用DSUM进行多条件汇总,这个非常棒

多条件求和用SUMPRODUCT函数